重写 IComparer 以使用 lambda 表达式

我正在尝试重写我IComparer<Animal>的代码以使用 lambda 表达式,但我似乎无法正确完成此操作


public class AnimalCarriageSorter : IComparer<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 targetAnimal.Size.CompareTo(animal.Size);

    }

}


跃然一笑
浏览 136回答 2
2回答

临摹微笑

您可以使用Func<Animal, Animal, int>而不是轻松地重写它IComparer<Animal>,例如Func<Animal, Animal, int> comparer = (x, y) =>&nbsp;&nbsp; &nbsp; x.FoodDiet.CompareTo(y.FoodDiet) != 0 ?&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; x.FoodDiet.CompareTo(y.FoodDiet) :&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; x.Size.CompareTo(y.Size)

德玛西亚99

问题是您已将比较从 切换animal.CompareTo(targetAnimal)为targetAnimal.CompareTo(animal),因此您不会获得一致的结果。在这两种情况下,您都应该将其animal作为第一个对象。例如:public int Compare(Animal animal, Animal targetAnimal){&nbsp; &nbsp; // Compare diet first.&nbsp; &nbsp; if (animal.FoodDiet.CompareTo(targetAnimal.FoodDiet) != 0)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; return animal.FoodDiet.CompareTo(targetAnimal.FoodDiet);&nbsp; &nbsp; }&nbsp; &nbsp; // Compare size.&nbsp; &nbsp; return animal.Size.CompareTo(targetAnimal.Size);}或者你可以稍微简化一下:public int Compare(Animal animal, Animal targetAnimal){&nbsp; &nbsp; return animal.FoodDiet.CompareTo(targetAnimal.FoodDiet) != 0&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; ? animal.FoodDiet.CompareTo(targetAnimal.FoodDiet)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; : animal.Size.CompareTo(targetAnimal.Size);}
打开App,查看更多内容
随时随地看视频慕课网APP