【发布时间】:2013-12-03 04:52:42
【问题描述】:
我正在尝试使用 IComparer 对一组对象进行排序。
我编写了代码,但它只适用于特定对象。例如:
对于这个类
public class Cars
{
public string Name { get; set; }
public string Manufacturer { get; set; }
public int Year { get; set; }
public Cars(string name, string manufacturer, int year)
{
Name = name;
Manufacturer = manufacturer;
Year = year;
}
}
我的代码如下:
class MySort
{
public class SortByYears : IComparer
{
int IComparer.Compare(Object x, Object y)
{
Cars X = (Cars)x, Y = (Cars)y;
return (X.Year.CompareTo(Y.Year));
}
}
public class SortByName : IComparer
{
int IComparer.Compare(Object x, object y)
{
Cars X = (Cars)x, Y = (Cars)y;
return (X.Name.CompareTo(Y.Name));
}
}
public class SortByManyfacturer : IComparer
{
int IComparer.Compare(object x, object y)
{
Cars X = (Cars)x, Y = (Cars)y;
return (X.Manufacturer.CompareTo(Y.Manufacturer));
}
}
}
但如果我添加另一个具有不同属性的类,它将毫无用处。
那么有没有机会修改这段代码,使其适用于具有不同属性的对象?
【问题讨论】:
-
我不确定我是否理解你的问题。因此,您可能还想对 Cat 类使用 SortByName,但不想再次为 Cat 实现它,对吧?您需要一个包含属性名称的 Car 和 Cat 基类,然后将您的比较器更改为:
-
公共类 SortByName : IComparer { int IComparer.Compare(Object x, object y) { Base X = (Base)x, Y = (Base)y;返回(X.Name.CompareTo(Y.Name)); } }
-
那么您可以按名称比较 2 只猫、按名称比较 2 辆汽车以及按名称比较猫和汽车。
-
好吧,在这种情况下,我需要一个额外的课程。我想在没有它的情况下这样做。还是谢谢。
-
编辑你的问题更清楚!
标签: c# arrays sorting icomparable icomparer