Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建Func以返回引用类型和值类型_C#_Expression Trees - Fatal编程技术网

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)3
Age
是一个
int
-属性,所以我想这不会编译。