gpt4 book ai didi

c# - 比较器创建lambda函数无法隐式转换类型CS0029

转载 作者:行者123 更新时间:2023-12-02 10:54:04 26 4
gpt4 key购买 nike

我正在尝试为数据结构添加一个比较器,如下所示:

    private SortedSet<int> sortedScore = new SortedSet<int>(Comparer<int>.Create(
(a, b) => a > b));

但是我得到了:CS0029无法将类型'bool'隐式转换为'int'

这很奇怪,因为 a > b是 bool(boolean) 值,而不是整数,即使强制转换也无济于事,但是如果我这样做:
    private SortedSet<int> sortedScore = new SortedSet<int>(Comparer<int>.Create(
(a, b) => a.CompareTo(b)));

我没有收到任何错误,实际上,除此以外,我没有得到与上述相同的错误。那么,如何将比较器更改为默认值以外的其他值?

最佳答案

因为IComparer<T>必须提供一个方法

int Compare(T x, T y)

即,它必须返回 int,而不是 bool
  • 如果是int > 0,则必须返回一个a > b
  • 如果是0,则必须返回a = b
  • 如果是int < 0,则必须返回一个a < b

  • 您的第二个示例使用 a.CompareTo(b),它返回所需的 int

    如果要实现自己的逻辑,则可以将lambda编写为:
    (a, b) => a > b ? +1 : a < b ? -1 : 0

    关于c# - 比较器创建lambda函数无法隐式转换类型CS0029,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43311416/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com