From 7fae24634142a50688de478a2db105ff4b6fcf69 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Sun, 23 Aug 2015 22:40:34 +0100 Subject: [PATCH] Added convenience overload taking a default value factory method. This overload is useful in scenarios where you want to provide a default value but is relatively expensive to execute. Using the overload, the factory method is only executed if the infoset does not contain an entry for the requested key. --- src/Orchard/ContentManagement/InfosetHelper.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Orchard/ContentManagement/InfosetHelper.cs b/src/Orchard/ContentManagement/InfosetHelper.cs index 379c2a665..9b7cae247 100644 --- a/src/Orchard/ContentManagement/InfosetHelper.cs +++ b/src/Orchard/ContentManagement/InfosetHelper.cs @@ -10,19 +10,26 @@ namespace Orchard.ContentManagement { public static TProperty Retrieve(this TPart contentPart, Expression> targetExpression, - TProperty defaultValue = default(TProperty), + Func defaultValue, bool versioned = false) where TPart : ContentPart { var propertyInfo = ReflectionHelper.GetPropertyInfo(targetExpression); var name = propertyInfo.Name; - var infosetPart = contentPart.As(); var el = infosetPart == null ? null : (versioned ? infosetPart.VersionInfoset.Element : infosetPart.Infoset.Element) .Element(contentPart.GetType().Name); var attr = el != null ? el.Attribute(name) : default(XAttribute); - return attr == null ? defaultValue : XmlHelper.Parse(attr.Value); + return attr == null ? defaultValue != null ? defaultValue() : default(TProperty) : XmlHelper.Parse(attr.Value); + } + + public static TProperty Retrieve(this TPart contentPart, + Expression> targetExpression, + TProperty defaultValue = default(TProperty), + bool versioned = false) where TPart : ContentPart { + + return Retrieve(contentPart, targetExpression, () => defaultValue, versioned); } public static TProperty Retrieve(this ContentPart contentPart, string name,