我有一个返回 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: An expression of type
System.Int32
cannot be used as return-typeSystem.Object
. (or something similar, have german version).
如果我选择 Name
-属性而不是 Age
- 属性(property)同样有效。我知道这与装箱和拆箱有关 int
不扩展 object
.
但是,我如何才能返回表示值类型属性的适当函数?
最佳答案
您可以使用 Expression.Convert
将整数转换为 object
,如下所示:
var expr = Expression.Convert(
Expression.Property(
Expression.Constant(
new Foo {Name = "Hans", Age = 3},
typeof (Foo)),
"Age"),
typeof(object));
关于c# - 创建 Func 以返回引用类型和值类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34811468/