私はこの拡張メソッド(コンパイル)を作成しました:
public static IEnumerable<J> Flatten<T, J>(this IEnumerable<T> @this)
where T : IEnumerable<J>
{
foreach (T t in @this)
foreach (J j in t)
yield return j;
}
以下のコードはコンパイル時エラーを引き起こします(適切なメソッドが見つかりません)、なぜですか?:
IEnumerable<IEnumerable<int>> foo = new int[2][];
var bar = foo.Flatten();
以下のように拡張機能を実装すると、コンパイル時エラーは発生しません。
public static IEnumerable<J> Flatten<J>(this IEnumerable<IEnumerable<J>> @this)
{
foreach (IEnumerable<J> js in @this)
foreach (J j in js)
yield return j;
}
Edit(2):この質問は答えられたと思いますが、過負荷の解決と型の制約に関する別の質問がありました。私がここに置いたこの質問:タイプ制約がメソッドシグネチャの一部ではないのはなぜですか?