我正在尝试使用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,但代码实际上会引发异常。
答案 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()