我有一个包含10个或更多Level
个对象的Arraylist。这些对象都具有级别ID。
我现在尝试写一个IComparer.CompareTo(Level a,Level b)
。
我真的不知道如何实现这一点。从未与IComparer
合作,当我阅读MSDN Libary时,我并没有变得更聪明。
我试过了:
public int CompareTo(Level a, Level b)
{
if (a.LevelID < b.LevelID)
{
return -1;
}
else if (a.LevelID == b.LevelID)
{
return 0;
}
else
return 1;
}
this._alLevel.Sort(CompareTo(Level[0],Level[1])
_alLevel
是Arraylist
我的Level
对象。
我是初学者......
答案 0 :(得分:2)
我强烈建议您将级别存储在通用List<Level>
中。它保证了代码中的类型安全性,并通过消除将对象运行时转换为期望类型的需要来提高性能。
但是,如果您决定使用非泛型ArrayList
,则必须创建一个实现非通用IComparer
接口的比较器,如下所示:
public class LevelComparer : IComparer<Level>, IComparer
{
#region IComparer<Level> Members
public int Compare(Level x, Level y)
{
if (object.ReferenceEquals(x, y))
return 0;
if (x == null)
return 1;
else if (y == null)
return -1;
return x.LevelID.CompareTo(y.LevelID);
}
#endregion
#region IComparer Members
public int Compare(object x, object y)
{
return Compare(x as Level, y as Level);
}
#endregion
}
(请注意,我的比较器也实现了通用IComparer<Level>
接口,因此您可以将其与List<Level>
一起使用。此外,如果对象无法转换为Levels,则会进行空检查。纯粹的通用比较器我可能不会打扰。)
接下来,将比较器的一个实例传递给你的arraylist的sort method:
arrayList.Sort(new LevelComparer());
答案 1 :(得分:1)
我想你的_alLevel是List<Level>
然后,您需要实施IComparer<Level>
,例如
public class LevelComparator: IComparer<Level> {
public int CompareTo(Level a, Level b)
{
if (a.LevelID < b.LevelID)
{
return -1;
}
else if (a.LevelID == b.LevelID)
{
return 0;
}
else
return 1;
}
}
然后,您可以实例化比较器并将其传递给Sort
:
this._alLevel.Sort(new LevelComparator());
在里面,Sort方法将使用CompareTo方法执行排序