Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DefaultIfEmpty仍引发异常序列不包含匹配元素_C#_Linq_Defaultifempty - Fatal编程技术网

C# DefaultIfEmpty仍引发异常序列不包含匹配元素

C# DefaultIfEmpty仍引发异常序列不包含匹配元素,c#,linq,defaultifempty,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).Sing

我有一个方法如下所示:

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

序列不包含匹配元素

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


我如何才能做到这一点?

这是因为在此之后您将调用
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;

除非
myParameter
“找不到ID号”
,否则该异常是合乎逻辑的。请提供更多代码。没有足够的信息。然而,这是你的
单次
呼叫。@DanielA.White实际上是我处理这个问题的全部代码。。基本上,如果我从lambda中取出
DefaultIfEmpty
。。只有
lstLogons.Single(x=>x.IDNumber==myParameter)。。如果找不到
myParameter
,我不希望引发异常。。我只需要一个默认值。您的
defaultProperty
没有匹配
myParameter
IDNumber
,因此
.Single()
抛出。什么
lstLogons
?这与“defaultProperty”有什么关系?DefaultIfEmpty()将返回不包含任何项的集合-不,不会。如果源为空,它将返回一个包含单个元素(类型的默认值)的集合。。。因此得名。但是,
Single
接受谓词的重载与…@jonsket my bad,感谢您的更正,更新后反映了:)运行此命令时,在使用
SingleOrDefault
时使用
defaultProperty
有什么目的吗?If
SingleOrDefault
返回一个空值,而不使用
DefaultIfEmpty
。。那么创建
defaultProperty
就没有用了?啊,明白了。我认为这只是同时执行的一整行。。并且没有想到先运行
SingleOrDefault
,然后再检索
Logon
。清晨。。我需要更多的咖啡因。谢谢你的帮助。非常感谢。不用担心,喝杯咖啡;)很高兴能帮助@GTown编码器