-3

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

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

序列不包含匹配元素

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

我怎样才能使这项工作?

4

1 回答 1

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;
于 2018-02-06T13:56:09.500 回答