c# - 创建 Func 以返回引用类型和值类型

标签 c# expression-trees

我有一个返回 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-type System.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/

相关文章:

c# - ASP.NET Web Api 身份验证方法

C# LINQ 存储 int?作为整数

c# - 修改 IQueryable.Include() 的表达式树,为 join 添加条件

c# - 迭代 lambda 表达式的属性

c# - 是否可以使用表达式树来定义动态类型的方法体?

c# - 第二个玩家运动输入滞后

c# - 索引器通过引用获取还是获取+设置?

c# - Expression.AddChecked 和 System.Int16

c# - 使用表达式树读取属性的名称和值。有其他选择吗?

c# - 使用 Dapper 在 Linq 中进行多对多