-1

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 を返します。入力にあるのと同じ種類のイテレータが出力に必要です

あなたが私を助けてくれることを願っていますありがとう

4

1 に答える 1