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 ответ

Решение

Это потому что ты звонишь 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;
Другие вопросы по тегам