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

C# 比较器创建lambda函数无法隐式转换类型CS0029,c#,.net,data-structures,compiler-errors,compare,C#,.net,Data Structures,Compiler Errors,Compare,我正在尝试为数据结构添加比较器,如下所示: private SortedSet<int> sortedScore = new SortedSet<int>(Comparer<int>.Create( (a, b) => a > b)); 我没有得到任何错误,事实上,除此之外的任何东西都会得到与上面相同的错误。那么,如何将比较器更改为默认值以外的其他值呢 因为IComparer必须提供一种方法 int Compare(T x

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

    private SortedSet<int> sortedScore = new SortedSet<int>(Comparer<int>.Create(
        (a, b) => a > b));
我没有得到任何错误,事实上,除此之外的任何东西都会得到与上面相同的错误。那么,如何将比较器更改为默认值以外的其他值呢

因为IComparer必须提供一种方法

int Compare(T x, T y)
也就是说,它必须返回int,而不是bool

如果a>b,它必须返回int>0。 如果a=b,则必须返回0。 如果a 如果要实现自己的逻辑,可以将lambda编写为:

(a, b) => a > b ? +1 : a < b ? -1 : 0

您的数据结构类型为SortedSet。因此,您只能使用的比较器应该实现IComparer接口。此接口有一个名为Compare的方法,其签名如下:

int Compare(int x, int y)
并比较两个值x和y,并返回一个值,该值指示一个值是小于、等于还是大于另一个值。有关更多信息,请查看

也就是说,不能使用返回bool的方法。这就是您收到此错误消息的原因

int Compare(int x, int y)