2015-04-16 3 views
1

Если Single не находит элемент, который вы ожидаете существовать, он бросает InvalidOperationException. Единственная проблема заключается в том, что другие вещи также приводят к этому исключению. Например, модель первого кода EF устарела.Лучший способ поймать «Последовательность не содержит элементов»

Я попытался сузить его, проверив сообщение об исключении. Однако это может измениться, и я бы не стал мудрее. Есть ли лучший способ поймать эту проблему?

try 
    { 
     return DbSet.Single(filter); 
    } 
    catch (InvalidOperationException exc) 
    { 
     if (exc.Message == "Sequence contains no elements") 
     { 
      throw new UserNotFoundException(); 
     } 

     throw; 
    } 

ответ

3

Использовать вместо .FirstOrDefault(). Затем проверьте, равен ли результат. Если это так, пользователь не был найден.

+0

OK. Вид поражения цели Первого не так. –

+1

Первый и единственный имеют свои применения. Когда вы * знаете *, у вас есть хотя бы один элемент, а вероятность того, что вы его не удаляете, вы можете использовать Single. – Amy

Смежные вопросы