Linq Expression获取插入的转换函数

时间:2013-02-25 22:32:53

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

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

enter image description here

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

为什么会这样出现?

1 个答案:

答案 0 :(得分:10)

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