我正在尝试为数据结构添加一个比较器,如下所示:
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/