SingleOrDefault
IEnumerableを返すのではなく、代わりに単一のアイテムを返します。すでに変数に割り当てて保持しているので、item
それをさらに処理するために使用してみませんか?
NotificationWindowItem item = itemList.Where(elm => elm.UID == UID).SingleOrDefault();
item.Read = true;
これをさらに単純化できます。そして、Timが指摘したように、nullチェックが必要です(理由は以下を参照)。
NotificationWindowItem item = itemList.SingleOrDefault(elm => elm.UID == UID);
if (item == null)
{
// ... some alternative or error handling code
}
else
{
item.Read = true;
}
質問/不明確さを拡張するには:
- itemListはアイテムのリストです。各アイテムはNotificationWindowItemです。リストはIEnumerableインターフェイスを実装します。(より正確には、itemListは
List<NotificationWindowItem>
を実装するものであると想定していますIEnumerable<NotificationWindowItem>
。
- を取り、一致する要素のみを含む
IEnumerable<NotificationWindowItem>
別のメソッドを作成する拡張メソッドはどこにありますか。IEnumerable<NotificationWindowItem>
- SingleOrDefaultは、を受け取り
IEnumerable<NotificationWindowItem>
、通常の単純な単一のNotificationWindowItemを返します。(それ以上に、一致する要素が1つしかないことを確認します。一致する要素が複数ある場合は例外がスローされます。一致する要素がない場合は、default(T)
どちらが返さnull
れますか)。
item
ではありませんIEnumerable
。ですNotificationWindowItem
。背後に魔法はありません。シンプルなオブジェです。LINQとは何の関係もありません。LINQを使用して取得しただけですが、その後、NotificationWindowItemの他のインスタンスで実行できることは何でも実行できます。