SingleOrDefault
不返回 IEnumerable 而是返回单个项目。既然您已经分配并保存在您的变量item
中,为什么不简单地使用它进行进一步处理呢?
NotificationWindowItem item = itemList.Where(elm => elm.UID == UID).SingleOrDefault();
item.Read = true;
您可以进一步简化这一点。而且,正如 Tim 所指出的,您需要进行空值检查(原因见下文):
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>
which implements IEnumerable<NotificationWindowItem>
。
- Where 是一个扩展方法,它采用
IEnumerable<NotificationWindowItem>
并创建另一个IEnumerable<NotificationWindowItem>
只包含匹配元素的方法。
- SingleOrDefault 接受
IEnumerable<NotificationWindowItem>
并返回一个普通的、简单的、单一的 NotificationWindowItem。(更重要的是,它验证只有一个匹配的元素。如果有多个元素匹配,它将引发异常。如果没有元素匹配,则返回default(T)
您null
的情况)。
item
不是一个。_ IEnumerable
它是一个NotificationWindowItem
. 背后没有魔法。这是一个简单的对象。它与 LINQ 没有任何关系。您只使用 LINQ 来检索它,但之后您可以对 NotificationWindowItem 的任何其他实例执行任何操作。