5

この拡張メソッドを実装しました:

public static IEnumerable<T> DoForEach<T>(this IEnumerable<T> data, Action<T> action)
{
    foreach (T value in data)
    {
        action(value);
        yield return value;
    }
}

私がする時

output.DoForEach<string>(c => Console.WriteLine(c));

コンソールには何も書き込まれません。これが機能しない理由はありますか?ありがとう

4

2 に答える 2

6

これは、イテレータを返しているが、実行していないためです。あなたが書いたことを考えると、リストから列挙子を取得するのではなく、リストに対してアクションを実行したいので、DoForEach() 関数が void を返すようにし、yield リターンを取り除く必要があるようですそれ。これにより、出力がコンソールに書き込まれます。

編集:ここに私が何を意味するかを示すスニペットがあります:

    public static void DoForEach<T>(this IEnumerable<T> data, Action<T> action)
    {
        foreach (T value in data)
        {
            action(value);
        }
    }
于 2013-05-05T20:16:54.413 に答える