我正在尝试在 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# 出于某种原因不支持的基本功能?
确实支持。
你需要这样做:
IComparer<long> comparer = Comparer<long>.Create((x, y) => y - x == 0 ? 0 : y - x > 0 ? 1 : -1);