IComparer接口,比较许多对象而不仅仅是两个实例

时间:2012-11-13 11:18:28

标签: c#

我正在关注Apress pro c#framework的示例,我对IComparer接口有疑问 如果我想创建一些自定义比较器,它将按名称比较我的对象,我应该实现IComparer接口,所以我有以下

public class CarNameComparer : IComparer
    {
        int IComparer.Compare(object obj1, object obj2)
        {
            Car temp1 = obj1 as Car;
            Car temp2 = obj2 as Car;
            if (temp1 != null && temp2 != null)
            {
                return String.Compare(temp1.Name, temp2.Name);                
            }
            else
            {
                throw new ArgumentException("Parameter is not a Car");
            }
        }
    }

我打算像这样比较

Array.Sort(italianCars, new CarNameComparer());

哪个好,但这个方法只比较两个实例,据我所知,这是一个有限的用法。如果我想比较一堆对象,而不仅仅是两个对象,该怎么办?

3 个答案:

答案 0 :(得分:8)

您误解了Comparer的使用。即使有{000}个Car实例,它仍会对数组进行排序。它只是通过一次比较两个来做到这一点

答案 1 :(得分:2)

除了@Jamiec答案,您还可以使用LINQ -

对数组进行排序
italianCars.OrderBy(car => car.Name);

答案 2 :(得分:1)