【发布时间】:2017-04-07 12:06:52
【问题描述】:
基本上我正在尝试使用表达式树来做到这一点
var properties = new Dictionary<string, object>();
foreach (var propInfo in objType.GetTypeInfo().GetProperties(BindingFlags.Public))
{
var name = propInfo.Name;
var value = propInfo.GetValue(objInstance);
properties.Add(name, value);
}
return properties;
即创建名称和值对的字典,其中名称是objType 的属性名称,值是objType 的实例objInstance 的属性值
现在将其转换为表达式应该编译为简单的委托
Func<T, Dictionary<string, object>> func = i =>
{
var properties = new Dictionary<string, object>();
properties.Add("Prop1", (object)i.Prop1);
properties.Add("Prop2", (object)i.Prop2);
properties.Add("Prop3", (object)i.Prop3);
// depending upon the number of properties of T, Add will continue
return properties;
};
我知道如何执行其中的一些操作,但我不确定如何创建字典的本地实例,然后在后续表达式中使用它(并返回它)?
【问题讨论】:
-
你可以使用 Expression.Constant(..) 从你的局部变量生成表达式
-
表达式和委托是不同的东西。你到底想达到什么目的?
Func<object, Dictionary<string, object>>或Expression<Func<object, Dictionary<string, object>>>? -
抱歉,本地是指编译表达式的代表的本地,请参阅上面的代表主体修正。
-
委托我的意思是编译表达式的结果
标签: c# reflection expression expression-trees