2

私はラムダ式の使用法を学ぼうとしているため、ドキュメントやその他の関連記事を読んだ後でも実装に苦労しています。したがって、この次のループをラムダ式に変換したい場合は、どうすればよいのでしょうか。ラムダ式がどのように機能するかを確認する方法が必要です。
コード:

var pc = Enumerable.Range(2, 100).ToList();
var j = 0;
while (j < pc.Count)
{
    Console.WriteLine(pc[j]);
    j++;
}
4

8 に答える 8

4
Enumerable.Range(2, 100).ToList().ForEach(p => Console.WriteLine(p));

ステップバイステップの説明

  1. Enumerable.Range は、IEnumarable<int>長さ 100 の 2 から開始します。項目は 2,3,4.....101 になります。

  2. .ToList()に変換IEnumerableListます。なぜ変換するのですか?ForEachのメソッドを使用できるようにしListます。

  3. あなたにとって最も重要ですForEach()。名前が示すように、リスト内の各アイテムに対してアクションを実行します。=> Console.WriteLine(p)ここでは、リストの各要素が取得され、コンソールに書き込むために「移動」するランタイム変数 p に入れられます。

于 2012-07-02T09:03:42.017 に答える
3

それがあなたの質問に対する答えではないことは知っていますが、これは例であり、LINQが本当に問題の最善の解決策であるかどうかを常に再考しています。学習の例が必要なだけだと理解していますが、ハンマーを持っている人にとっては、すべてが釘のように見えることを覚えておいてください...

foreach (var item in Enumerable.Range(2, 100))
{
  Console.WriteLine(item);
}

これは私にとって理解しやすく、不要なリストは作成されません。

(怒りのコメントが多すぎないことを願っています...)

于 2012-07-02T09:29:48.207 に答える
1

試す

Enumerable.Range(2, 100).ToList().ForEach(n => Console.WriteLine(n))

ただし、一般に、追加のオブジェクトが作成されるため、ラムダは低速であることに注意してください。パフォーマンスが重要なアプリケーションでは使用しないでください。

于 2012-07-02T09:02:45.623 に答える
0
pc.ForEach(f => Console.WriteLine(f));
于 2012-07-02T09:02:16.260 に答える
0

のメモリ内リストを作成する必要はありませんEnumerable.Range

var result = string.Join(Environment.NewLine, Enumerable.Range(2, total));
Console.Write(result);
于 2012-07-02T09:02:55.480 に答える
0
pc.ForEach(j => Console.WriteLine(j));
于 2012-07-02T09:03:13.467 に答える
0

次のように実行できます。

Enumerable.Range(2, 100).ToList().ForEach(x => Console.WriteLine(x));
于 2012-07-02T09:03:51.620 に答える
0
 Enumerable.Range(2, 100).ToList().ForEach(n => Console.WriteLine(n));
于 2012-07-02T09:04:18.977 に答える