key*_*rdP 3 c# linq syntactic-sugar default-value short-circuiting
当以流畅的语法编写时,是否有语法糖或方法可以在同一行中“短路”LINQ 语句?例如,如果null
由调用返回FirstOrDefault
,是否可以返回 null,否则继续方法链的其余部分?
List<string> testList = new List<string>() { "some", "strings" };
var reversed = testList.FirstOrDefault(x => x == "hello").Reverse();
Run Code Online (Sandbox Code Playgroud)
该调用将返回 null,因此该语句将在调用时FirstOrDefault
抛出一个异常。有没有办法在调用之前停止,因为此时返回了默认值?ArgumentNullException
Reverse
Reverse
(我知道查询可以分成另一行,并且default(T)
可以在之前进行检查Reverse
,或者,对于简单的情况,可以使用条件运算符 ( ?:
),但我很好奇我是否缺少更长/更复杂链的特定功能)
编辑 - 为了澄清这只是一个展示想法的示例,它不是任何实际代码的一部分。我想避免引发异常,因为只分割行并进行检查会提高性能。
如果您想要将集合解析为单个项目并操作该项目,但仍然可以优雅地处理集合中可能找不到该项目的情况,您可以将 延迟到FirstOrDefault
最后,如下所示:
var reversed = testList
.Where(x => x == "hello")
.Select(x => x.Reverse())
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
或者同等地
var reversed = testList
.Where(x => x == "hello")
.Select(Enumerable.Reverse)
.FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
null
如果列表中没有满足方法中指定条件的项目,则返回此值Where
。这里的性能差异最多可以忽略不计。它不需要循环遍历testList
原始代码,因为一旦找到第一个元素,就会立即返回结果。
归档时间: |
|
查看次数: |
1463 次 |
最近记录: |