convertAll ジェネリックのような関数を実行したいと思います
public static Iout ConvertAll<Iin, Iout, T, TOutput>(this Iin source, Converter<T, TOutput> converter)
where Iin : IEnumerable<T>
where Iout : IEnumerable<TOutput>
{
foreach (var item in source)
yield return converter(item);
}
問題は、ビジュアルスタジオが教えてくれることです:
「Sgd.CollectionExtensions.ConvertAll(Iin, System.Converter)」の本体は、「Iout」が反復子インターフェイス型ではないため、反復子ブロックにすることはできません
where句があるので、イテレータのように認識されるはずですよね?
私も試します:
public static I<TOutput> ConvertAll<I, T, TOutput>(this I<T> source, Converter<T, TOutput> converter)
where I : IEnumerable
{
foreach (var item in source)
yield return converter(item);
}
しかし、それは言います
型パラメーター 'I' は、型引数では使用できません
だから私は何をすべきかわからない。次のような関数は必要ありません:
public static IEnumerable<TOutput> ConvertAll<T, TOutput>(this IEnumerable<T> source, Converter<T, TOutput> converter)
{
foreach (var item in source)
yield return converter(item);
}
それははるかに単純で機能していますが、IEnumerable を返します。入力にあるのと同じ種類のイテレータが出力に必要です
あなたが私を助けてくれることを願っていますありがとう