【发布时间】:2013-08-14 15:36:02
【问题描述】:
当用流畅的语法编写时,是否有语法糖或方法来“短路”同一行中的 LINQ 语句?例如,如果 null 由 FirstOrDefault 调用返回,是否可以返回 null 否则继续方法链的其余部分?
List<string> testList = new List<string>() { "some", "strings" };
var reversed = testList.FirstOrDefault(x => x == "hello").Reverse();
FirstOrDefault 调用将返回 null,因此该语句将在 Reverse 调用上引发 ArgumentNullException。有没有办法在Reverse 调用之前停止,因为此时返回了默认值?
(我知道查询可以分成另一行,default(T) 可以在Reverse 之前检查,或者,对于简单的情况,可以使用条件运算符(?:),但我很好奇我是否可以'我错过了更长/更复杂链的特定功能)
编辑 - 澄清这只是一个展示想法的示例,它不是任何实际代码的一部分。我想避免抛出异常,因为只拆分行并进行检查会更高效。
【问题讨论】:
-
这没有意义 -
FirstOrDefault()只会返回一个元素,所以Reverse()在这里没有意义......你想做什么? -
这只是一个不可否认的人为的例子。我实际上并没有这样做,或者特别是什么,但这只是一个应该返回 null 而不是继续沿着方法链向下的场景。
标签: c# linq default-value syntactic-sugar short-circuiting