私のコードには、コレクションの並べ替えメソッドが実装されていますが、今日、奇妙なことに気付きました。列挙型に新しい列挙値を追加しようとすると、並べ替えメソッドがこのエラーでクラッシュしました。
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