c#空条件运算符是否可以与linq方法一起工作?

本文关键字:方法 linq 一起 工作 条件运算符 是否 | 更新日期: 2023-09-27 18:06:20

我正在尝试使用猫王操作符来实现这样的事情

List<string> list = new List<string> { "str1", "str2", "str3"};
string searchkey = "str4"; // this does not exist in the list so will use elvis operator before picking the first from the resulting sequence.
var result = list.where(s=>(s.Contains(searchkey)))?.First();

我期望结果为null,但代码实际上抛出了一个异常。

c#空条件运算符是否可以与linq方法一起工作?

问题是

list.Where(s=>(s.Contains(searchkey)))

不返回null;它返回一个空序列,这是不一样的。

如果您想在对象序列为空时获得null,则使用FirstOrDefault:

var result = list.FirstOrDefault(s=>(s.Contains(searchkey)));

注意: c#版本的"Elvis Operator"是||,而不是?.。代码中的操作符叫做空条件操作符

因为Where运算符返回任何要枚举的值,而First()不能求值。您可以使用FirstOrDefault()