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

By simon at 2018-02-07 • 0人收藏 • 29人看过

我有一个像这样的方法:

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一个我知道不存在的值,所以我希望能够给这些类型的情况一个默认值。但, 相反,它只是抛出一个异常:

序列contains没有匹配的元素 我知道它不包含我正在寻找的元素..因此需要/想要的 为默认值。 何我可以做这个工作吗?

2 个回复 | 最后更新于 2018-02-07
2018-02-07   #1

这是因为你打电话Single()之后,DefaultIfEmpty()会 返回集合只有一个项目,并打电话这意味着Single() 总是会有总是有一个项目与你指定的标准和 它没有匹配,在你需要hereSingleOrDefault()哪个不会扔 例外,如果没有找到匹配的项目,insead将返回null。

我想要返回一个默认值 你可以创建一个默认值的局部变量:

var logon = String.Empty;

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

return logon;

2018-02-07   #2

这是因为你打电话Single()之后,DefaultIfEmpty()会 返回集合只有一个项目,并打电话这意味着Single() 总是会有总是有一个项目与你指定的标准和 它没有匹配,在你需要hereSingleOrDefault()哪个不会扔 例外,如果没有找到匹配的项目,insead将返回null。

我想要返回一个默认值 你可以创建一个默认值的局部变量:

var logon = String.Empty;

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

return logon;

登录后方可回帖

Loading...