public static void UpdateValue <T>(this T targetNode, IModelNode sourceNode, params Expression <Func <T, object> >[] expressions) where T : IModelNode { foreach (var expression in expressions) { var attributeName = targetNode.GetPropertyName(expression); if (sourceNode.HasValue(attributeName)) { var value = sourceNode.GetValue <T>(attributeName); sourceNode.ClearValue(attributeName); targetNode.SetValue(attributeName, value); } } }