c#null-conditional运算符是否与linq方法一起使用

时间:2016-09-08 19:56:36

标签: c# linq operator-keyword

我正在尝试使用elvis运算符来实现类似的东西

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,但代码实际上会引发异常。

2 个答案:

答案 0 :(得分:2)

问题在于

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

不会返回null;它返回一个空序列,这不是一回事。

如果您希望在对象序列为空时获得null,请使用FirstOrDefault

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

注意: C#版本的“猫王操作员”是||,而不是?.。代码中的运算符称为 null条件运算符

答案 1 :(得分:0)

因为Where运算符返回枚举的任何内容而无法计算First()。您可以使用FirstOrDefault()