У меня возникла проблема с разрешением метода расширения. LINQ и MoreLINQ содержат метод zip
, он присутствует в .NET с версии 4.0 и всегда находился в MoreLINQ библиотека. Но вы не можете использовать одну из реализаций с сильным синтаксисом nice-old extension. Таким образом, этот код не будет компилировать
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>)'
Я нашел хорошее разрешение для метода Concat
на string
для MoreLINQ, сделанного Джоном Скитом в этом сообщении, но я не знаю о хорошем разрешение для метода zip
.
ПРИМЕЧАНИЕ.. Вы всегда можете использовать синтаксис вызова static method, и все это отлично работает с
MoreEnumerable.Zip(students, colors, (s, c) => s + c )
но немного пропускает точку синтаксиса синтаксиса расширения. Если у вас много преобразований данных с вызовами LINQ и MoreLINQ, вы не хотите использовать статический вызов метода посередине.
Есть ли более эффективные способы решения этой двусмысленности?