Бросать исключение в c #, guard - PullRequest
5 голосов
/ 25 июля 2011

У меня сегодня была дискуссия о рефакторинге этого (# 1)

public void MyFunc(object myArgument)
{
    if(myArgument == null)
        throw new ArgumentNullException("myArgument");
....

С этим (# 2)

//inside a shared assembly in a class called Guard
public static void AgainstArgumentNull(object obj, string message)
{
    if (obj == null)
        throw new ArgumentNullException(message);
}

public void MyFunc(object myArgument)
{
    Guard.AgainstArgumentNull(myArgument, "myArgument");
....

Моя интуиция заключалась в том, что # 1 был лучше для следующегопричины:

  1. # 1 проще, чем # 2, в том смысле, что он не требует знания библиотеки Util, только базовые знания C #
  2. # 1 не устранят способность переименовывать reharperстрока, переданная в конструктор ArgumentNullException.
  3. # 2 увеличит зависимости для кода (должен иметь доступ к dll, содержащему dll)
  4. Трассировка стека не будет такой же для # 2, какэто было бы для # 1

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

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Вы также можете извлечь выгоду из # 2 в стандартизации обработки исключений в некоторой степени для нескольких проектов; абстракция также позволяет позднее улучшить библиотеку и перераспределить, например, регистрация ошибок, например.

1 голос
/ 25 июля 2011

В данном конкретном случае вам не следует использовать Guard Вы должны использовать кодовые контракты.

Contract.Requires(myArgument != null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...