我有一个方法返回由表达式构建的Func<object>
,如下所示:
var expr = Expression.Property(
Expressions.Expression.Constant(new Foo { Name = "Hans", Age = 3 }, typeof(Foo)),
"Age");
var f = Expression.Lambda<Func<object>>(expr).Compile();
此表达式应返回此虚拟Age
- 对象的Foo
- 属性。问题是因为我想要返回Func<object>
而不是Func<int>
我得到了
ArgumentException:类型
System.Int32
的表达式不能用作返回类型System.Object
。 (或类似的东西,有德语版本)。
如果我选择Name
- 属性而不是Age
- 属性同样有用。我知道这与装箱和拆箱有关,因为int
不会延长object
。
但是,如何返回表示value-type-property的适当函数?
答案 0 :(得分:4)
您可以使用Expression.Convert
将整数转换为object
,如下所示:
var expr = Expression.Convert(
Expression.Property(
Expression.Constant(
new Foo {Name = "Hans", Age = 3},
typeof (Foo)),
"Age"),
typeof(object));