2010-03-08 156 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对象执行与您正在执行的操作类似的任务。