public static class ObjectHelper { public static void Set<T, TProp>(this T obj, Expression<Func<T, TProp>> property, TProp value) { if (obj == null) throw new ArgumentNullException("obj"); if (property == null) throw new ArgumentNullException("property"); var memberExpression = (MemberExpression) property.Body; var targetPropertyInfo = (PropertyInfo) memberExpression.Member; // obj value targetPropertyInfo.SetValue(obj, value); } }
myObject.Set(x => x.MyProperty, "bla-bla-bla"); // myObject.Set(x => x.MyProperty.InnerProperty, "bla-bla-bla"); //
public static class ObjectHelper { public static void Set<T, TProp>(this T obj, Expression<Func<T, TProp>> property, TProp value) { if (obj == null) throw new ArgumentNullException("obj"); if (property == null) throw new ArgumentNullException("property"); object target = obj; var memberExpression = (MemberExpression) property.Body; var targetPropertyInfo = (PropertyInfo) memberExpression.Member; if (memberExpression.Expression.NodeType != ExpressionType.Parameter) { var expressions = new Stack<MemberExpression>(); while (memberExpression.Expression.NodeType != ExpressionType.Parameter) { memberExpression = (MemberExpression)memberExpression.Expression; expressions.Push(memberExpression); } while (expressions.Count > 0) { var expression = expressions.Pop(); var propertyInfo = (PropertyInfo)expression.Member; target = propertyInfo.GetValue(target); if (target == null) throw new NullReferenceException(expression.ToString()); } } // obj, target value targetPropertyInfo.SetValue(target, value); } }
myObject.Set(x => x.MyProperty, "bla-bla-bla"); // myObject.Set(x => x.MyProperty.InnerProperty, "bla-bla-bla"); //
Source: https://habr.com/ru/post/259567/
All Articles