我在一個叫List
Sort
:我如何將方法傳遞給List.Sort()?
List<Stuff> list = new List<Stuff>();
list.Sort(StuffSortByName);
與StuffSortByName
聲明:
private static int StuffSortByName(Stuff x, Stuff y)
{
...
}
最讓我驚訝的是,我的代碼編譯和作品。這是令人驚訝的是沒有Sort
重載採用的方法:
所以我很幸運,因爲我不希望有創建一個完整的對象,實現IComparer,只是爲了排序的東西。但是對於我來說,我在編譯時並不明白。
現在我想複製那個魔法。我想排序一個ListView。但是你不排序listivew,你給一個列表視圖的IComparer
通過它的ListViewItemSorter
屬性:
listView1.ListViewItemSorter = [IComparer]
並再次,我不想寫一個整體對象,我只是想傳遞一個本地方法(最好是一種非靜態的):
listView1.ListViewItemSorter = SortListView;
private static int SortListView(Object x, Object y)
{
....
}
現在當然,這並不編譯,因爲它沒有任何意義。但是之前的語法不應該編譯 - 但它確實。
所以它給了我希望,我可以在這裏有相同的混淆語法。
我是如何在第一種情況下允許通過一種方法作爲排序比較器的,但是在第二種情況下卻不行?
請注意,第一個匹配'Comparison',匹配一個函數,該函數需要兩個T並返回一個int。將它傳遞給委託,'Func '等。第二個版本有不同的期望,即'IComparer'。 –
2012-01-09 22:18:38