DefaultIfEmpty仍然抛出异常序列包含无匹配元素

时间:2018-02-06 13:47:39

标签: c# linq defaultifempty

我有一个看起来像这样的方法:

public static string MyMethod(string myParameter)
{
    var defaultProperty = new Validation() {IDNumber = "ID Number Not Found", Logon = "ID Number Not Found" };
    try
    {
        return lstLogons.DefaultIfEmpty(defaultProperty).Single(x => x.IDNumber == myParameter).Logon;
    }
    catch (Exception exception)
    {
        throw new ArgumentException(exception.Message, myParameter);
    }
}

测试时,我给myParameter一个我知道不存在的值,所以我希望能够为这些类型的情况提供默认值。但是,它只是抛出异常:

  

序列不包含匹配元素

我知道它不包含我正在搜索的元素..因此需要/想要一个默认值。

我该如何做到这一点?

1 个答案:

答案 0 :(得分:2)

这是因为您之后正在调用Single(),而DefaultIfEmpty()将返回仅包含一个项目的集合,并且调用Single()意味着其中始终会有一个项目使用您指定的条件并且它不匹配,此处需要SingleOrDefault(),如果找不到匹配项,则不会抛出异常,否则它将返回null

  

我想返回默认

您可以使用默认值为其创建局部变量:

var logon = String.Empty;

var result =  lstLogons.SingleOrDefault(x => x.IDNumber == myParameter);
if(result!=null)
    logon = result.Logon;

return logon;