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 关注
- 135 浏览
添加回答
举报
