我有一个看起来像这样的方法:
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
一个我知道不存在的值,所以我希望能够为这些类型的情况提供默认值。但是,它只是抛出异常:
序列不包含匹配元素
我知道它不包含我正在搜索的元素..因此需要/想要一个默认值。
我该如何做到这一点?
答案 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;