拡張メソッドの解決で問題が発生しました。LINQ と MoreLINQ にはメソッドが含まれており、 4.0バージョンzip
から .NET に存在し、常にMoreLINQライブラリにありました。しかし、古き良き拡張メソッド構文で実装の 1 つを使用することはできません。したがって、このコードはコンパイルされません
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 呼び出しを使用したデータ変換が多数ある場合は、途中で静的メソッド呼び出しを使用したくありません。
このあいまいさを解決するためのより良い方法はありますか?