当使用lambda表达式从以下代码中查找最大Key值时,在使用gmcs在Unix系统上进行编译时会出现以下编译错误:
List<KeyValuePair<int, RunnerBase>> lsFinishOrder = new List<KeyValuePair<int, RunnerBase>>();
...fill out List...
iMaxPlace = lsFinishOrder.Max(p => p.Key);
代码在Windows机器上编译正常,并且在执行时按预期执行,只有在我尝试在Linux上编译时才会出现问题。
错误CS0121:以下方法之间的呼叫不明确或 特性: `System.Linq.Enumerable.Max&LT; System.Collections.Generic.KeyValuePair&LT; INT,Pathfinder.RunnerBase&GT;&GT;(System.Collections.Generic.IEnumerable&LT; System.Collections.Generic.KeyValuePair&LT; INT,Pathfinder.RunnerBase&GT;&GT; , System.Func&lt; System.Collections.Generic.KeyValuePair&lt; int,Pathfinder.RunnerBase&gt;, long &gt;)'
和 `System.Linq.Enumerable.Max&LT; System.Collections.Generic.KeyValuePair&LT; INT,Pathfinder.RunnerBase&GT;&GT;(System.Collections.Generic.IEnumerable&LT; System.Collections.Generic.KeyValuePair&LT; INT,Pathfinder.RunnerBase&GT;&GT; , System.Func&lt; System.Collections.Generic.KeyValuePair&lt; int,Pathfinder.RunnerBase&gt;, int &gt;)'
/usr/lib/mono/gac/System.Core/3.5.0.0__b77a5c561934e089/System.Core.dll (与先前错误相关的符号的位置)
任何想法都会受到欢迎,因为我尝试了很多不同的方法,我想知道我是不是在寻找错误的地方。我的Windows构建目标是.Net 3.5。
答案 0 :(得分:2)
这看起来像是Mono编译器中的一个错误。
试试这个来帮助它:
iMaxPlace = lsFinishOrder.Max((Func<KeyValuePair<int, RunnerBase>, int>)(p => p.Key));