我的代码中有一个用于集合的排序方法,今天我发现了一些奇怪的东西。当我尝试向枚举添加新的枚举值时,排序方法因此错误而崩溃。
无法排序,因为 IComparer.Compare() 方法返回不一致的结果。一个值与自身比较不相等,或者一个值与另一个值重复比较会产生不同的结果。x:'',x 的类型:'Texture2D',IComparer:'System.Array+FunctorComparer`1[Microsoft.Xna.Framework.Graphics.Texture2D]'。
这看起来真的很奇怪,现在排序依赖于早期结果,它应该做的就是在枚举索引之后排序,而不是字母顺序。
这是代码。
availableTiles.Sort(CompareTilesToEnum);
private static int CompareTilesToEnum(Texture2D x, Texture2D y)
{
int xValue = (int) (Enum.Parse(typeof(TileTyp), x.Name, true));
int yValue = (int) (Enum.Parse(typeof(TileTyp), y.Name, true));
if (xValue > yValue)
{
return 1;
}
else
{
return -1;
}
}
public enum TileTyp
{
Nothing = -1,
Forest,
Grass,
GrassSandBottom,
GrassSandLeft,
GrassSandRight,
GrassSandTop,
Mounten,
Sand,
Snow,
Water,
GrassSandTopLeft,
GrassSandAll,
GrassSandBottomLeft,
GrassSandBottomRightLeft,
GrassSandBottomRightTop,
GrassSandBottomTopLeft,
GrassSandRightLeft,
GrassSandRightTop,
GrassSandRightTopLeft,
GrassSandBottomRight,
GrassSandBottomTop
}
我添加的值是
GrassSandBottomRight,
GrassSandBottomTop