我遇到了扩展方法解析问题。 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>)'

我在this post上的Jon Skeet的MoreLINQ的Concat上找到了string方法的良好分辨率,但是我不知道zip方法的良好分辨率。

注意:您可以始终使用静态方法调用语法,并且在以下情况下都可以正常使用
MoreEnumerable.Zip(students, colors, (s, c) => s + c )

但是有点错过了扩展语法的要点。如果您使用LINQ和MoreLINQ调用进行大量数据转换-您不想在中间使用静态方法调用。

有没有更好的方法来解决这种歧义?

最佳答案

一种使其编译的方法是:

var students = new[] { "Mark", "Bob", "David", "test" }.AsQueryable();
var colors = new[] { "Pink", "Red", "Blue" };

students
    .Zip(colors, (s, c) => s + c)
    .Dump();
students对象必须转换为IQueryable对象。

关于c# - 如何解决Enumerable和MoreLINQ之间的模糊ZIP调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14396971/

10-10 04:09