Идиоматический способ сигнализации нереализованных методов в С#
Я создаю скелет для приложения С# и намереваюсь оставить кучу методов без реализации - возвращать фиктивные значения. Я намереваюсь вернуться к ним, но не хочу, чтобы случайно забыть реализовать любой из них.
Я хочу сигнализировать, когда я дойду до метода, который не реализован, и продолжить выполнение с фиктивным значением.
Какой идиоматический способ сделать это?
Ответы
Ответ 1
Классический способ сделать это:
throw new NotImplementedException();
который ясен для вызывающего и который легко найти позже, чтобы исправить (фактически он автоматически появляется в некоторых списках задач). Однако, если это не вариант, возможно:
return 0; // TODO
снова, это будет автоматически отображаться в списках задач и легко найти.
Если вам нужно что-то более очевидное:
[Obsolete("not implemented")]
public int Foo() {
return 0;
}
который появится как предупреждение компилятора у вызывающего или:
public int Foo() {
#warning Foo not implemented
return 0;
}
который появится в качестве предупреждения компилятора в методе.
Ответ 2
Традиционно вы бросаете NotImplementedException
для заглушки, но это, конечно, прекратит выполнение этого пути. Другие варианты:
Просто зарегистрируйте его. Вставьте строку в свой журнал или консольный вывод.
Или, в зависимости от того, сколько всплывающих окон вас раздражает, вы можете использовать Debug.Assert
/Debug.Fail
, чтобы вывести сообщение, когда эти методы удалены.
Ответ 3
Существует также возможность использования TODO, это будет отображаться в списке задач в Visual Studio.
//TODO: Finish this method
public int dummy()
{
return 0;
}
Повторите
throw new NotImplementedException()
Ответ 4
Возможно, путем исключения NotImplementedException в каждом методе без реализации?
Чтобы вернуть значение, возможно, вы можете использовать фальшивую фреймворк
Ответ 5
Поскольку вы хотите продолжить выполнение, я бы использовал TODO:
и возвратил значение по умолчанию, если метод имеет тип возврата.
Значение по умолчанию - ОК, если это значение, которое приведет к сбою ваших модульных тестов, но TODO вполне заметны в списке задач, особенно если вы используете Resharper.