【发布时间】:2016-01-07 22:23:24
【问题描述】:
我有一组嵌套的 linq 查询,用于从属性列表中获取属性。它按原样工作得很好,但有一个警告。我必须进行错误处理,以防万一没有合适的匹配。是否有类似的方法可以在不使用 try-catch 块的情况下完成以下代码的工作?
try
{
organization =
_orgs.FirstOrDefault(n =>
n.OrganizationFields.FirstOrDefault(nn =>
nn.Key == "customer_id").Value.ToString() == id);
}
catch (InvalidOperationException)
{
return null;
}
catch (NullReferenceException)
{
return null;
}
【问题讨论】:
-
组织与组织字段是一对多的吗?如果是这种情况,那么您可以使用 _orgs.OrganizationFields(where id 上的子句).Select(n => n._org).FirstOrDefault(); 开始查询如果没有匹配项应该返回 null 而不会导致异常
-
firstordefault 本身不会抛出 InvalidOperationException。在您的代码中似乎永远不会发生异常(如果您不将其抛出到属性的获取器中)。所以捕获是无用的。
-
@M.kazemAkhgary
_orgsorOrganizationFieldsor.ToString()都可能抛出空引用异常:)
标签: c# linq refactoring