我有一個imprmented排序方法在我的代碼集合今天我注意到一些奇怪的東西。當我試圖向枚舉中添加新的枚舉值時,sort方法會因此錯誤而崩潰。排序停止工作後枚舉值添加
無法排序,因爲IComparer.Compare()方法返回不一致的結果。一個值不會與自身等同,或者一個值反覆與另一個值比較會得到不同的結果。 x:'',x的類型:'Texture2D',IComparer:'System.Array + FunctorComparer`1 [Microsoft.Xna.Framework.Graphics.Texture2D]'。
這似乎真的很奇怪,現在這種方式依賴於早期的結果,它應該做的就是排序後確定alfabatic命令的枚舉索引。
這是代碼。
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
如果A和B相等,則對於'A> B'和'B> A',您的代碼都返回-1' –