3
在我的項目某些屬性的形式(X => x.property)表達出來在運行時(X =>轉換(x.property)),如下所示:LINQ表達式得到轉換函數插入
它取決於屬性類型,double和DateTime似乎是罪魁禍首。適用於字符串屬性(例如,Speed和ForeColour都是字符串)
爲什麼會出現這種方式?
在我的項目某些屬性的形式(X => x.property)表達出來在運行時(X =>轉換(x.property)),如下所示:LINQ表達式得到轉換函數插入
它取決於屬性類型,double和DateTime似乎是罪魁禍首。適用於字符串屬性(例如,Speed和ForeColour都是字符串)
爲什麼會出現這種方式?
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
謝謝你這麼多喬恩。有沒有一種方法可以用泛型來接受這些表達式,因爲「Expression> test1 =(x => x.GpsDateTime);」但我無法接受這些列表。像「List >>屬性」就是我打算使用的。 –
basarat
2013-02-25 22:41:55
想通了一種方式:而不是接受一個列表。我應該設計一個流暢的API來添加每個表達式,然後每個函數調用都可以被泛型驅動。謝謝。 – basarat 2013-02-25 22:52:00