2

これをLINQとして書き込もうとしています。

元のコード:

For Each CurrentForm As Form In MyForms
    AddLink(CurrentForm.GetLink())
Next

私はLINQの初心者ですが、これまでのところ、どこで使用するか、どこで使用しないかはよくわかりません。この場合、LINQがより多くの害を及ぼし、助けになる場合は、遠慮なく私を炎上させてください。

編集: IEnumerableを取るAddLink()のオーバーロードがあると想定できます

4

2 に答える 2

3

コレクションを取る AddLink のオーバーロードがない限り、LINQ はループを回避しません。

そのような過負荷はありますか?次のようなものがあります:

AddLinks(MyForms.Select(f => f.GetLink())

それをするでしょう。


上記の式がどのように機能するか (簡単に):

  • LINQ は、いくつかのオブジェクトを取る式に関するものです (ここで使用される LINQ to Objects の場合、常にコレクションです)
  • Select拡張メソッドは、コレクションと関数を受け取り、コレクションを返します。この関数には、入力コレクションの各要素が渡されます。Select は、すべての関数の戻り値で構成されるコレクションを返します。
  • ラムダ式を使用して、f という 1 つの引数を取り (その型はコンパイラによって決定されます)、式の値を返す無名関数を作成しました (現在は修正されています)。
  • AddLinks は、リンクのコレクションを取得する AddLink の想定バリアントです。

多くのことが行われています。これは LINQ の利点の 1 つであり、明示的なループや一時変数の通常のオーバーヘッドなしでデータ操作を表現するコンパクトな方法です。

于 2009-02-21T13:49:23.767 に答える
2

ここには炎はありませんが、LINQ はここではあまり役に立ちません。LINQ にForEachメソッドがある場合 (前の質問や他の場所で説明されているように)、それを使用できますが、LINQ には組み込まれておらず、この場合はあまり使用されないようです。

もちろん、それは正確に何をするかによって異なりAddLinkます。リストにリンクを追加し、代わりに (たとえば)List.AddRangeを使用できる場合は、LINQ を使用できます。しかし、このコードは非常に単純で読みやすいように見えるので、この場合は心配する必要はありません。

于 2009-02-21T13:49:53.313 に答える