为什么 Comparer 不支持 C# 中 lambda 操作的 64 位(长)委托返回类型?

问题描述 投票:0回答:1

我正在尝试在 C# 中创建一个优先级队列,该队列由按降序排列的 64 位(长)整数组成。 不幸的是,.NET 似乎不支持这个?

这是失败的代码:

PriorityQueue<long, long> pq = new PriorityQueue<long, long>(Comparer<long>.Create((x, y) => y - x));

这是它生成的错误:

错误CS0266:无法将类型“long”隐式转换为“int”。存在显式转换(您是否缺少转换?)

错误 CS1662:无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

应该注意的是,如果我将所有“长”引用更改为“int”,一切都会完美运行。

我可以在某个地方放置一个强制转换来完成这项工作,还是这只是 C# 出于某种原因不支持的基本功能?

c# lambda types casting delegates
1个回答
0
投票

确实支持。

你需要这样做:

IComparer<long> comparer = Comparer<long>.Create((x, y) => y - x == 0 ? 0 : y - x > 0 ? 1 : -1);
© www.soinside.com 2019 - 2024. All rights reserved.