亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

重寫 IComparer 以使用 lambda 表達式

重寫 IComparer 以使用 lambda 表達式

C#
躍然一笑 2022-12-04 10:56:33
我正在嘗試重寫我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);    }}
查看完整描述

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)


查看完整回答
反對 回復 2022-12-04
?
德瑪西亞99

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);

}


查看完整回答
反對 回復 2022-12-04
  • 2 回答
  • 0 關注
  • 115 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號