2010-04-05 80 views
2

我很困惑。Lambda表達式不會編譯

我有這樣的lambda表達式:

tvPatientPrecriptionsEntities.Sort((p1, p2) => 
    p1.MedicationStartDate 
     .Value 
     .CompareTo(p2.MedicationStartDate.Value)); 

Visual Studio將不會編譯它,抱怨語法。

我轉換蘭巴表達一個匿名委託作爲這樣:

tvPatientPrecriptionsEntities.Sort(
    delegate(PatientPrecriptionsEntity p1, PatientPrecriptionsEntity p2) 
    { 
     return p1.MedicationStartDate 
       .Value 
       .CompareTo(p2.MedicationStartDate.Value); 
    }); 

並能正常工作。

該項目使用.NET 3.5,我有一個參考System.Linq

+9

你得到了什麼錯誤信息? – 2010-04-05 16:49:51

+3

似乎爲我編譯罰款。什麼類型是tvPatientPrecriptionsEntities? (是否正確假設p1.MedicationStartDate是可以空的日期時間?(「DateTime?」即 – Jakob 2010-04-05 16:59:16

回答

2

DateTime.CompareTo被重載。嘗試在你的lambda中使用顯式參數類型:

(DateTime p1, DateTime p2) => ... 
+0

)這些不是DateTimes,而是一個自定義類... – 2010-04-05 16:53:52

+0

啊,沒有讀那個第二個例子無論如何,如果PatientPrecriptionsEntity.CompareTo過載,則同樣的評論適用。 – 2010-04-05 17:05:22

1

以下代碼爲我編譯得很好。也許你應該縮小你的代碼與這個簡單的例子之間存在什麼顯着差異來確定問題的根源。

static void Main(string[] args) 
{ 
    PatientPrescriptionsEntity[] ppe = new PatientPrescriptionsEntity[] {}; 
    Array.Sort<PatientPrescriptionsEntity>(ppe, (p1, p2) => 
     p1.MedicationStartDate.Value.CompareTo(p2.MedicationStartDate.Value)); 
} 
... 
class PatientPrescriptionsEntity 
{ 
    public DateTime? MedicationStartDate; 
}