如果我能够通过Lambda表达式分配(下面),这将非常简单
//An expression tree cannot contain an assignment operator
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName = "Tim";
Run Code Online (Sandbox Code Playgroud)
由于赋值运算符,上面的代码无效.我需要传递一个lambda表达式,以便识别需要设置的复杂对象中的属性.在某些情况下,复杂对象具有List,因此有重复的对象类型和名称,这就是为什么我需要lambda显式引用要更新的对象中的字段.
我可以使用以下方法检索值,没问题.但我不知道如何使用相同的逻辑设置值,我遇到了Expression.Assign并相信这可能是解决方案.
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName;
var result = FindByProperty(expression);
public static string FindByProperty(Expression<Func<Contract, object>> propertyRefExpr)
{
ComplexObj obj = new ComplexObj();
Contact myContact = new Contact();
myContact.FirstName = "Allen";
obj.Contacts = new List<Contact>{myContact};
return propertyRefExpr.Compile().Invoke(obj);
}
Run Code Online (Sandbox Code Playgroud)
更新:
"将属性赋值作为表达式树传递给方法......"
使用带有ParentTypeA的SetValue方法,Value将不起作用.(下面的代码)
Expression<Func<ComplexObj, object>> expression = obj => obj.Contacts[0].FirstName;
obj.AssignNewValue(expression, firstName);
public static void AssignNewValue(this ComplexObj obj, Expression<Func<ComplexObj, object>> expression, object …Run Code Online (Sandbox Code Playgroud) 我需要动态创建一个类对象.我尝试使用dynamic关键字.
dynamic dataTransferObject = new dtoClass();
dataTransferObject.Property1= "someValue";
dataTransferObject.Property2= "someOtherValue";
LogicLayer.Update(dataTransferObject);
Run Code Online (Sandbox Code Playgroud)
我将解释该对象以在逻辑层内执行进一步的操作.编译器不喜欢我的语法,请指教!