2012-02-20 8 views
3

私はオブジェクトの配列を持っています.1つのフィールドはincludeInReportというブール値のフィールドです。あるケースでは、私はそれをいつも真実にしたいと思っています。linqを使用して配列の1つのフィールドを変更します

foreach (var item in awards) 
{ 
    item.IncludeInReport = true; 
} 

しかし、linqでこれを行うには均等な方法がありますか?それを...私の最初の考えはこれを実行することでした...その後、何も私の好奇心を満たすために、より多くのです

awards.Select(a => new Award{ IncludeInReport = true, SomeFiled = a.SomeField, .... } 

しかし、私は私のオブジェクト内のいくつかのフィールドを持っているので、私はすべてのアウトを入力する必要がありますする必要はありませんでしたそのフィールドの画面上ではちょうど混乱しています。ありがとう!

+0

List.ForEachは一般的に以下のように他の人が注視しています。それは良い記事です:http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx – deepee1

答えて

8

のForEachは、LINQの一種である:

awards.ForEach(item => item.IncludeInReport = true); 

しかし、LINQのは、値を更新に関するものではありません。あなたは正しいツールを使用していません。


「linqの種類」を定量化してください。 ForEachは ではなく、 Linqですが、方法は List<T>です。ただし、構文はLinqに似ています。可能な場合は、そのアクションを平行になり

awards.AsParallel().ForAll(item => item.IncludeInReport = true) 

+2

'ForEach'は' Listに実装されたメソッドです'それは賞が' List ' – MarcinJuraszek

+1

の場合にのみうまくいくでしょうか?確かに、それぞれが「純粋」ではないかもしれないが、opが望むものに対してはうまくいくだろう。まず.ToList()をまず実行してください。 – Maess

0

あなたはそのような何かを行うことができます。

2

Linqでは突然変異法はありません。 Linqは、データの照会、順序付け、フィルタリング、結合、および投影に役立ちます。それを突然変異させる必要があるならば、あなたは既に非常にきれいで明確な方法を持っています:あなたのループ。

List<T>は、ForEachの方法でLinqを思い出させるものを書く方法を公開していますが、そうではありません。次に、Action<T>またはあなたの突然変異を各要素に順番に適用する他の代理人/機能を提供することができます。 (Ahmed Mageedのanswerには少し異なるメソッドも書かれています)IEnumerable<T>と同じように独自の拡張メソッドを書くことができます(前述のメソッドよりも一般的に適用可能で、配列でも使用可能です)。しかし、私はあなたのループを維持することをお勧めします。それはまったく汚いとは限りません。

4

あなたは、配列を始めているので、あなたがArray.ForEach methodを使用することができます。

Array.ForEach(awards, a => a.IncludeInReport = true); 

これはLINQではありませんが、この場合には、あなたは、LINQを必要としません。他の人が触れたように、LINQを介してアイテムを変更することはできません。 List<T>がある場合は、同様の方法でits ForEach methodを使用できます。 Eric Lippertは、この問題について、ここで詳しく解説します:"foreach" vs "ForEach"

1

ここで正しいコードです:

awards = awards.Select(a => {a.IncludeInReport = true; return a;}); 

は、LINQは、関数型プログラミングのアイデアを以下のため、あなたが(変異する)既存の変数を変更する必要はありません。

代わりに、上記のコードでは、新しいリスト(既存の値は変更していない)を作成して元のリストを上書きします(これはLINQの外にあるので、関数型プログラミングのアイデアは気にしません)。

関連する問題