2013-02-25 31 views
3

在我的項目某些屬性的形式(X => x.property)表達出來在運行時(X =>轉換(x.property)),如下所示:LINQ表達式得到轉換函數插入

enter image description here

它取決於屬性類型,double和DateTime似乎是罪魁禍首。適用於字符串屬性(例如,Speed和ForeColour都是字符串)

爲什麼會出現這種方式?

回答

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 
+0

謝謝你這麼多喬恩。有沒有一種方法可以用泛型來接受這些表達式,因爲「Expression > test1 =(x => x.GpsDateTime);」但我無法接受這些列表。像「List >>屬性」就是我打算使用的。 – basarat 2013-02-25 22:41:55

+0

想通了一種方式:而不是接受一個列表。我應該設計一個流暢的API來添加每個表達式,然後每個函數調用都可以被泛型驅動。謝謝。 – basarat 2013-02-25 22:52:00