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;