for WPF developers
Home Profile Tips 全記事一覧

AsEnumerable 拡張メソッドで独自に定義した拡張メソッドと区別を付ける

(2017/03/07 20:09:23 created.)

(2017/03/07 20:19:48 modified.)

AsEnumerable 拡張メソッドは次のように定義されています。

ILSpy による逆コンパイル結果
  1. public static IEnumerable<TSource> AsEnumerable<TSource>(this IEnumerable<TSource> source)
  2. {
  3.     return source;
  4. }

つまり、元のシーケンスを System.Collection.Generic.IEnumerable として返します。もし独自クラスを定義し、その中で Any や Aggregate など、既に System.Linq.Enumerable クラスで定義されている拡張メソッドと同名の拡張メソッドを定義してしまった場合、その拡張メソッドを呼び出したとき、独自クラスで定義された拡張メソッドが優先されて呼び出されます。ただし、AsEnumerable 拡張メソッドを使うと、その戻り値は System.Collection.Generic.IEnumerable クラスとなるため、元の System.Linq.Enumerable クラスで定義されている拡張メソッドを呼び出されるようになります。

独自クラスを定義した上で同名の拡張メソッドを定義しない限り AsEnumerable 拡張メソッドの出番はありません。