我遇到了扩展方法解析的问题。LINQ 和 MoreLINQ 包含zip
方法,它从4.0版本开始存在于 .NET 中,并且始终存在于MoreLINQ库中。但是您不能使用带有旧扩展方法语法的实现之一。所以这段代码不会编译
using MoreLinq;
using System.Linq;
var students = new [] { "Mark", "Bob", "David" };
var colors = new [] { "Pink", "Red", "Blue" };
students.Zip(colors, (s, c) => s + c );
错误:
The call is ambiguous between the following methods or properties:
'MoreLinq.MoreEnumerable.Zip<string,string,string>
(System.Collections.Generic.IEnumerable<string>,
System.Collections.Generic.IEnumerable<string>, System.Func<string,string,string>)' and
'System.Linq.Enumerable.Zip<string,string,string>
(System.Collections.Generic.IEnumerable<string>,
System.Collections.Generic.IEnumerable<string>, System.Func<string,string,string>)'
我在这篇文章中找到了 Jon Skeet 为 MoreLINQ 制作的Concat
方法的良好分辨率,但我不知道方法的良好分辨率。string
zip
注意:您始终可以使用静态方法调用语法,并且一切正常
MoreEnumerable.Zip(students, colors, (s, c) => s + c )
但有点错过了扩展语法糖的意义。如果您使用 LINQ 和 MoreLINQ 调用进行大量数据转换 - 您不想在中间使用静态方法调用。
有没有更好的方法来解决这种歧义?