コレクションを取る AddLink のオーバーロードがない限り、LINQ はループを回避しません。
そのような過負荷はありますか?次のようなものがあります:
AddLinks(MyForms.Select(f => f.GetLink())
それをするでしょう。
上記の式がどのように機能するか (簡単に):
- LINQ は、いくつかのオブジェクトを取る式に関するものです (ここで使用される LINQ to Objects の場合、常にコレクションです)
- Select拡張メソッドは、コレクションと関数を受け取り、コレクションを返します。この関数には、入力コレクションの各要素が渡されます。Select は、すべての関数の戻り値で構成されるコレクションを返します。
- ラムダ式を使用して、f という 1 つの引数を取り (その型はコンパイラによって決定されます)、式の値を返す無名関数を作成しました (現在は修正されています)。
- AddLinks は、リンクのコレクションを取得する AddLink の想定バリアントです。
多くのことが行われています。これは LINQ の利点の 1 つであり、明示的なループや一時変数の通常のオーバーヘッドなしでデータ操作を表現するコンパクトな方法です。