首页 > 解决方案 > 仅在不为空时才从列表中获取对象

问题描述

仅当 A 不为空时,如何从 A 中获取对象?这是我正在尝试的,但我意识到q != null将永远是真的,因为 A 是一个列表。

A.Where(q => q.Id == B.Id && q != null)

我只需要在一行中进行选择,因为这是在 Select 语句中。

标签: c#linq

解决方案


如果您的列表为空,A.Where(...)将返回 0 个结果。因此,如果列表为空,则您不会从列表中获取任何项目。

关于您关于q != null始终为真的评论,如果您的列表包含引用类型,这是不正确的,因为您的列表可以包含空值:

List<string> A = new List<string>();
A.Add(null);

这意味着在这种情况下您的子句将失败,因为您的条件顺序错误(应该首先进行空检查):

A.Where(q => q != null && q.Id == B.Id);

你也可以这样写来使用空条件运算符,但请注意,如果B.Id也是空的,它将匹配:

A.Where(q => q?.Id == B.Id);

在上面的示例中,调用A.Where(q => q != null && q.Id == B.Id).ToList()将产生一个包含 0 个项目的列表(因为源列表不包含任何匹配的元素)。


推荐阅读