C# Выдают Исключение на использовании, Утверждают?

У меня есть система, где employeeId должен alway существовать, если нет некоторая базовая проблема.

Путем я вижу его, то, что у меня есть два варианта проверить этот код:

1:

public void GetEmployee(Employee employee)  
{  
   bool exists = EmployeeRepository.VerifyIdExists(Employee.Id);  
   if (!exists)   
   {   
     throw new Exception("Id does not exist");  
   }  
}    

или 2:

public void GetEmployee(Employee employee)  
{  
  EmployeeRepository.AssertIfNotFound(Employee.Id);  
}  

Действительно ли опция № 2 приемлема на языке C#?

Мне нравится он, потому что это опрятно в этом, мне не нравится смотреть, "выдают новое Исключение ("bla bla bla"), тип передает outsite объем класса.

6
задан kbtz 16 January 2013 в 19:11
поделиться

4 ответа

Как правило, исключения следует создавать только в исключительных обстоятельствах. Поскольку это одно из таких обстоятельств, создание исключения является правильным решением.

5
ответ дан 10 December 2019 в 00:35
поделиться

Это зависит от того, что вы подразумеваете под Assert .

Вы можете использовать Debug.Assert (или Trace.Assert , если вы хотите, чтобы он также работал в режиме выпуска). Однако это не так полезно, потому что это останавливает программу и всплывает диалоговое окно, пока пользователь что-то не нажмет. Это не очень хорошо для неконтролируемой системы. Поэтому я бы рекомендовал вместо этого в большинстве случаев бросать, поскольку вы можете решить, как вы хотите отреагировать на ошибку - остановите программу или просто войдите в журнал и попробуйте продолжить.

Но если мы предположим, что ваш метод Assert проверяет свой аргумент и, возможно, выдает исключение, тогда да, я думаю, что это хороший способ сделать это.

На самом деле, чтобы выбрать пример, в книге Джона Скита morelinq используются оба метода. Например здесь :

public static IEnumerable<TSource> AssertCount<TSource>(
    this IEnumerable<TSource> source, 
    int count,
    Func<int, int, Exception> errorSelector)
{
    source.ThrowIfNull("source");
    if (count < 0) throw new ArgumentException(null, "count");
    errorSelector.ThrowIfNull("errorSelector");

    return AssertCountImpl(source, count, errorSelector);
}
4
ответ дан 10 December 2019 в 00:35
поделиться

Используйте исключения, для чего они нужны - исключительные обстоятельства. Все стандартные библиотеки .NET используют этот метод о том, как справляться с такими обстоятельствами, поэтому руководствуйтесь рекомендациями Microsoft.

1
ответ дан 10 December 2019 в 00:35
поделиться

Идея утверждений, как я всегда их использовал, заключается в том, что они являются мгновенной обратной связью при запуске отладочной сборки. Какое-то выражение по твоему лицу, что что-то случилось. Или войдите в файл, если приложение настроено таким образом.

Исключения используются для обработки исключительного поведения, как указано выше.

То, что я делаю, особенно на ранних этапах жизненного цикла проекта, может быть примерно таким:

public void GetEmployee(Employee employee)  
{  
   bool exists = EmployeeRepository.VerifyIdExists(Employee.Id);  
   Debug.Assert( exists, "employee does not exist for id: " + Employee.Id );
   if (!exists)   
   {   
     throw new Exception("Id does not exist);  
   }  
}   

Возможно, я откажусь от Debug.Assert после того, как будут устранены начальные ошибки.

0
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: