17

以下の例では、どのように簡単に変換eventScoresして、?List<int>のパラメーターとして使用できるようにすることができますprettyPrintか?

Console.WriteLine("Example of LINQ's Where:");
List<int> scores = new List<int> { 1,2,3,4,5,6,7,8 };
var evenScores = scores.Where(i => i % 2 == 0);

Action<List<int>, string> prettyPrint = (list, title) =>
    {
        Console.WriteLine("*** {0} ***", title);
        list.ForEach(i => Console.WriteLine(i));
    };

scores.ForEach(i => Console.WriteLine(i));
prettyPrint(scores, "The Scores:");
foreach (int score in evenScores) { Console.WriteLine(score); }
4

3 に答える 3

32

ToList拡張機能を使用します。

var evenScores = scores.Where(i => i % 2 == 0).ToList();
于 2009-10-08T12:40:16.053 に答える
10
var evenScores = scores.Where(i => i % 2 == 0).ToList();

動作しませんか?

于 2009-10-08T12:39:14.753 に答える
3

ちなみに、なぜこのような特定のタイプのスコアパラメータでprettyPrintを宣言し、このパラメータをIEnumerableとしてのみ使用するのですか(これがForEach拡張メソッドの実装方法であると思います)。では、prettyPrint署名を変更して、この遅延評価を維持してみませんか?=)

このような:

Action<IEnumerable<int>, string> prettyPrint = (list, title) =>
{
    Console.WriteLine("*** {0} ***", title);
    list.ForEach(i => Console.WriteLine(i));
};

prettyPrint(scores.Where(i => i % 2 == 0), "Title");

アップデート:

または、次のようにList.ForEachの使用を避けることができます(文字列の連結の非効率性を考慮しないでください)。

var text = scores.Where(i => i % 2 == 0).Aggregate("Title", (text, score) => text + Environment.NewLine + score);
于 2009-10-08T12:44:02.093 に答える