2010-03-08 153 views
2
private class CompAdvertisements : IComparer<Advertisements> 
{ 
private string OrderBy { get; set; } 

public CompAdvertisements(string orderBy) 
{ 
OrderBy = orderBy; 
} 

#region IComparer<Advertisements> Members 

public int Compare(Advertisements x, Advertisements y) 
{ 
return x.Country.Name.CompareTo(y.Country.Name); 

我也可以用戶x.Name.CompareTo(y.Name);在比較器中,我將比較兩個元素像點順序的東西和順序的東西2c#列表比較器使用兩個比較元素

回答

3

是的。如果外部比較表明您的兩個元素(Country.Name)相同,則您返回內部比較的結果(somethingElse)。你可以做任意深度的比較。

outerCompare = x.Country.Name.CompareTo(y.Country.Name); 
if (outerCompare != 0) 
{ 
    return outerCompare; 
} 
else 
{ 
    return (x.Name.CompareTo(y.Name)); 
} 
+0

如果x爲null,如何使這個元素位於最上層的底部使用排序。 – senzacionale 2010-03-08 16:14:10

+1

如果代碼中的x和y可能是空的(包括將來重用代碼的人),則應檢查x和y是否爲空。但是,因爲在你的例子中,你只是比較來自相同兩個對象的兩組屬性,如果它們都是null,那麼它們是相等的(返回0),但是如果一個是null而一個不是null,那麼它們是不相等的。在這種情況下,如果x不爲空則返回1,如果y不爲空則返回-1。 – 2010-03-08 17:19:48

+0

我的印象是,如果你寫x.Name.CompareTo(y.Name),並且x或y爲null,那麼你會得到一個NullReferenceException。 – Phil 2010-03-09 03:22:10

0

Eric J.是對的。您可能還想看看this stackoverflow question.這裏的答案給出了幾種可以對列表進行排序的方法,並且還詳細介紹瞭如何使用IComparer對象執行與您正在執行的操作類似的任務。