在我的某些属性项目中,表单(x => x.property)的表达式在运行时显示为(x => Convert(x.property)),如下所示:
这取决于属性类型,double和DateTime似乎是罪魁祸首。适用于字符串属性(例如Speed和ForeColour都是字符串)
为什么会这样出现?
答案 0 :(得分:10)
double
和DateTime
是值类型。编译器基本上使用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