2 回答

TA貢獻1982條經驗 獲得超2個贊
您可以使用Func<Animal, Animal, int>而不是輕松地重寫它IComparer<Animal>,例如
Func<Animal, Animal, int> comparer = (x, y) =>
x.FoodDiet.CompareTo(y.FoodDiet) != 0 ?
x.FoodDiet.CompareTo(y.FoodDiet) :
x.Size.CompareTo(y.Size)

TA貢獻1770條經驗 獲得超3個贊
問題是您已將比較從 切換animal.CompareTo(targetAnimal)為targetAnimal.CompareTo(animal),因此您不會獲得一致的結果。在這兩種情況下,您都應該將其animal作為第一個對象。
例如:
public int Compare(Animal animal, Animal targetAnimal)
{
// Compare diet first.
if (animal.FoodDiet.CompareTo(targetAnimal.FoodDiet) != 0)
{
return animal.FoodDiet.CompareTo(targetAnimal.FoodDiet);
}
// Compare size.
return animal.Size.CompareTo(targetAnimal.Size);
}
或者你可以稍微簡化一下:
public int Compare(Animal animal, Animal targetAnimal)
{
return animal.FoodDiet.CompareTo(targetAnimal.FoodDiet) != 0
? animal.FoodDiet.CompareTo(targetAnimal.FoodDiet)
: animal.Size.CompareTo(targetAnimal.Size);
}
- 2 回答
- 0 關注
- 115 瀏覽
添加回答
舉報