小编Anx*_*deV的帖子

如何通过Expression分配值?

如果我能够通过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)

c# expression-trees

8
推荐指数
1
解决办法
8561
查看次数

如何动态创建一个类

我需要动态创建一个类对象.我尝试使用dynamic关键字.

dynamic dataTransferObject = new dtoClass();
                dataTransferObject.Property1= "someValue";
                dataTransferObject.Property2= "someOtherValue";

                LogicLayer.Update(dataTransferObject);
Run Code Online (Sandbox Code Playgroud)

我将解释该对象以在逻辑层内执行进一步的操作.编译器不喜欢我的语法,请指教!

c# dynamic

4
推荐指数
1
解决办法
2007
查看次数

标签 统计

c# ×2

dynamic ×1

expression-trees ×1