3

次のコードセグメントでヘルプが必要です。

static void Main(string[] args)
{
    var customers = new HashSet<Customer>();
    var action = new Action(() =>
    {
        var innerCustomers = new Customer[] 
        { 
            new Customer { CustomerID = 1, CustomerName = "C 1" }, 
            new Customer { CustomerID = 2, CustomerName = "C 2" }, 
        };

        innerCustomers.Select(c => customers.Add(c)); //doesn't work

        foreach (var customer in innerCustomers) 
            customers.Add(customer); //works fine
    });

    action();
}

innerCustomers.Select(c => customers.Add(c));「customers」コレクションにレコードを挿入するという点では機能していないようですが、その行の下にある「foreach」は正常に機能します。なぜそれがlinqで機能しないのか誰かが知っていますか?selectメソッドから何も選択していないことを知っています

4

2 に答える 2

9

あなたSelectはそれですが、結果には何もしません。LINQの遅延評価(を介してオンデマンドで結果を生成するIEnumerable)のため、実行されません。foreachループを使用してください。これは可能な限りクリーンなソリューションです。

(他の解決策は、List<Customer>代わりに使用してそれを呼び出すForEachことです...しかし、コールバックでメソッドを使用したいという本当に正当な理由がない限り、利点はありません。)

編集:実際、あなたがしているのが要素をに追加することだけである場合HashSet、可能な限り最もクリーンな解決策はUnionWith次のとおりです。

customers.UnionWith(innerCustomers);
于 2012-07-24T21:26:24.763 に答える
-1

何をしようとしているのかわかりませんが、Selectを使用する必要がある場合は、次のように実行できます。

innerCustomers.Select(c => { customers.Add(c); return c; });
于 2012-07-24T21:27:31.877 に答える