【发布时间】:2021-11-04 13:45:38
【问题描述】:
var TravelRoute = MyData.TravelRouteByName(
parameters.Directions
.Where(p => p.TravelRouteId != null)
.Select(p => p.TravelRouteId.Value)
.Distinct()
.ToArray());
我有上面的示例 linq 查询。如果 Directions 为 null,则会通过异常“”
值不能为空。\r\n参数名称:源
在不引发异常的情况下处理这种情况的最佳方法是什么?
【问题讨论】:
-
Null-conditional operators 或
if(parameters.Directions != null) { var TravelRoute = MyData.TravelRouteByName(parameters.Directions.Where... -
@vernou 我希望在 if 语句之外声明 var TravelRoute,但是当我这样做时,它会抱怨“无法将 null 分配给隐式类型变量”
-
@StackTrace 在这种情况下,您必须使用显式类型声明变量。 (TravelRoute TravelRoute = null;)
-
@StackTrace 不要将所有内容放在一行中。在这种情况下,LINQ 查询没有理由与
MyData.TravelRouteByName在同一行。如果将该表达式提取到单独的行中,那么在执行查询之前检查Directions是否为空就变得很简单了。if (parameters.Directions != null){ var values=parameters.Directions.Where(....); var TravelRoute=MyData.TrravelRouteByName(values);...} -
如果
Directions为空,MyData.TravelRouteByName应该怎么做?该方法的其余部分是做什么的?也许您应该在方法开始之前验证parameters和Directions,然后再继续