【问题标题】:Linq Expression gets Convert function insertedLinq 表达式插入转换函数
【发布时间】:2013-02-25 22:32:53
【问题描述】:

在我的某些属性项目中,表单 (x=>x.property) 的表达式在运行时显示为 (x=>Convert(x.property)),如下所示:

这取决于属性类型,double 和 DateTime 似乎是罪魁祸首。适用于字符串属性(例如 Speed 和 ForeColour 都是字符串)

为什么会这样?

【问题讨论】:

    标签: c# asp.net-mvc c#-4.0


    【解决方案1】:

    doubleDateTime 是值类型。编译器基本上使用Expression.Convert 来表示装箱操作。

    string 已经是引用类型,所以不需要转换。

    你可以在普通代码中看到同样的东西:

    double d = 0.5;
    string s = "hello";
    
    object o1 = d;
    object o2 = s;
    

    ... 编译为:

    // d = 0.5
    IL_0001:  ldc.r8     0.5
    IL_000a:  stloc.0
    
    // s = "hello"
    IL_000b:  ldstr      "hello"
    IL_0010:  stloc.1
    
    // o1 = d - boxing!
    IL_0011:  ldloc.0
    IL_0012:  box        [mscorlib]System.Double
    IL_0017:  stloc.2
    
    // o2 = s - no boxing required!
    IL_0018:  ldloc.1
    IL_0019:  stloc.3
    

    【讨论】:

    • 非常感谢乔恩。自从“Expression> test1 = (x => x.GpsDateTime);”以来,有没有办法可以用泛型接受这些表达式有效,但我不能接受这些清单。 “List>> properties”之类的东西是我打算使用的。
    • 想出了一个办法:而不是接受一个列表。我应该设计一个流畅的 API 来添加每个表达式,然后每个函数调用都可以是泛型驱动的。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 2022-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多