C# 创建Func以返回引用类型和值类型
我有一个方法返回由表达式生成的C# 创建Func以返回引用类型和值类型,c#,expression-trees,C#,Expression Trees,我有一个方法返回由表达式生成的Func,如下所示: var expr = Expression.Property( Expressions.Expression.Constant(new Foo { Name = "Hans", Age = 3 }, typeof(Foo)), "Age"); var f = Expression.Lambda<Func<object>>(expr).Compile(); var expr=Expres
Func
,如下所示:
var expr = Expression.Property(
Expressions.Expression.Constant(new Foo { Name = "Hans", Age = 3 }, typeof(Foo)),
"Age");
var f = Expression.Lambda<Func<object>>(expr).Compile();
var expr=Expression.Property(
Expressions.Expression.Constant(new Foo{Name=“Hans”,Age=3},typeof(Foo)),
“年龄”);
var f=Expression.Lambda(expr.Compile();
此表达式应返回此虚拟Foo
-对象的Age
-属性。问题是,当我想返回一个Func
而不是Func
时,我得到了一个
ArgumentException:System.Int32类型的表达式不能用作返回类型System.Object。(或类似的,有德语版本)
如果我选择了名称
-属性而不是年龄
-属性,则同样有效。我知道这与装箱和拆箱有关,因为int
不扩展object
但是,如何返回表示值类型属性的适当函数?您可以使用该函数将整数强制转换为对象,如下所示:
var expr = Expression.Convert(
Expression.Property(
Expression.Constant(
new Foo {Name = "Hans", Age = 3},
typeof (Foo)),
"Age"),
typeof(object));
将Age=3强制转换为object:Age=(object)3Age
是一个int
-属性,所以我想这不会编译。