0

コレクション内のユーザー オブジェクトに id = to users101 でアクセスし、これを別のユーザーに設定しようとしています。

Controller.MyObject.SingleOrDefault(x => x.Id == "user101") = OtherUser();

前もって感謝します。

4

2 に答える 2

1

1 つの LINQ 式でそれを行うことはできません。

通常、LINQ 拡張機能は列挙型で機能しMyObjectます。コレクションの場合は、最初に必要なアイテムを見つけてから、新しいオブジェクトで上書きする必要があります (さらにSingleOrDefault()、条件が満たされない場合は単に null を返します)。

次のように書く必要があります (正確なコードは内容によって異なりますMyObject)。

var item = Controller.MyObject.SingleOrDefault(x => x.Id == "user101");
if (item != null)
    Controller.MyObject[Controller.MyObject.IndexOf(item)] = new OtherUser();

によって実行されるチェックが本当に必要ない場合はSingleOrDefault()、コードを単純化できることに注意してください (および で実行される二重検索を回避しますSingleOrDefault()) IndexOf()

これが「パフォーマンスが重要」である場合は、このタスクを 1 回のパスで実行するアドホック実装を作成する方がよいでしょう。

于 2012-05-30T12:24:14.487 に答える
-1

2行で試してください:

var objectWithId = Controller.MyObject.SingleOrDefault(x => x.Id == "user101");
(objectWithId as WhateverTypeOfObjectOtherUserIs) = OtherUser();
于 2012-05-30T12:24:37.310 に答える