我是新來的lambda表達式,並且遇到了一些我不明白的東西。有人能告訴我爲什麼這種lambda排序表達式不起作用嗎?
我有像這樣的對象:
class MyListItem
{
string date; //date in the format "2010-12-05"
int Hour; //hour of day as an int
}
我有這些對象的列表,代表了一些日期和時間。
我要對此列表進行排序按日期和時間,讓我試試這個:
List<MyListItem> myList = new List<MyListItem>();
myList = getsomedata(); //populate list
myList.Sort((a, b) => (a.date + a.Hour.ToString()).CompareTo(b.date + b.Hour.ToString()));
和工程類的。問題是,時間是一個int,所以它有時候不是2位,造成一種像這樣:
2010-12-05 1
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 2
2010-12-05 21
2010-12-05 22
我希望它是這樣的:
2010-12-05 1
2010-12-05 2
2010-12-05 10
2010-12-05 11
2010-12-05 12
2010-12-05 13
2010-12-05 21
2010-12-05 22
,所以我嘗試格式化字符串在我解析lambda之前添加一個零:
ret.Sort((a, b) => (a.date + a.Hour.ToString("00")).CompareTo(b.date + b.Hour.ToString("00")));
但它不會編譯。它告訴我:
Cannot convert lambda expression to type 'Systems.Collections.Generic.IComparer<MyListItem>' because it is not a delegate type.
咦?在這種情況下,平原.ToString()(沒有格式字符串)和.ToString(「00」)有什麼不同?
此外,有關如何得到這個工作的任何建議?
'ret`的類型是什麼?當我列出'List`時,我不會收到第二個排序例程的編譯問題。爲了再現性,您使用的是哪個版本的編譯器和框架? –
Ani
2011-01-06 18:34:13
奇怪你沒有編譯錯誤。 ret是列表()(應該是myList,剪切和粘貼錯誤)。我正在使用vs2010,.net 4.0。 –
BDW
2011-01-06 20:13:05