2016-11-30 3 views
1

LINQ Whereクエリと一致するかどうかに基づいて、リスト内のアイテムを変更しようとしています。LINQを使用してアイテムリストにコールバックを適用する

私は、このようにそれをやってみました:

class Collection<T> { 

    public List<T> Items { get; private set; } 

    public Collection<T> Modify(Func<T, bool> query, Func<T, T> callback) { 
     Items = Items.Where(query).Select(callback).ToList(); 
     return this; 
    } 
} 

しかし、それが一致しない場合、このリストから項目を削除します。アイテムをスキップしてリストに残したいと思います。どうすればこれを達成できますか?

+0

を使用して、2つの変数の代わりに、1。 Items = Items.Where(.....)があるので、元のデータが失われています。出力変数を別の名前にします。 – jdweng

+0

それを元のアイテムにどうやって適用しますか? –

+0

ケーキを食べて食べることはできません。一致したときに設定される別のプロパティを追加しない限り、古い値と新しい値を1つの変数に保持することはできません。 – jdweng

答えて

3

は、私はあなたがこれを行うことができると思う:

Items= Items.Select(e=>query(e)?callback(e):e).ToList(); 
関連する問題