Вместо того, чтобы делать Action открытым полем, сделайте его свойством или передайте его в метод.После этого вы можете выполнить проверку на нольЯ также сомневаюсь, что вам нужно получить его после установки, поэтому либо:
_displayError = (s) => { throw new ArgumentNullException("Please tell me what to do with this exception!"); };
public Action<string> DisplayError
{
set
{
if (value == null) { throw new ArgumentNullException("I need this!"); }
_displayError = value;
}
}
public void MyMethod()
{
_displayError("ERROR");
}
, либо:
public void MyMethod(Action<string> displayError)
{
if (displayError == null) { throw new ArgumentNullException("I need this!"); }
displayError("ERROR");
}
Первое из них не должно требовать каких-либо изменений кода от ваших потребителей.
Конечно, если вы просто работаете с командой, которая использует ваш код, вам вообще не нужно проверять на ноль .Просто выясните, кто неправильно использует ваш код, и пообщайтесь в чате, чтобы выяснить, в чем заключается недоразумение.Защитное программирование не является хорошей заменой команде, члены которой доверяют друг другу, и проверка на нуль не так эффективна, как наличие четко определенного и простого в использовании интерфейса.
Вам понадобятся 2 теста:
Мой класс:
- должен позволять потребителю обрабатывать любую ошибку
- Учитывая, что я собираюсь произвести ошибку по любой причине (установите контекст здесь)
- Когда я выдаю ошибку (вызов метода, пусть обработчик ошибок установит некоторую переменную)
- Затем я должен передать ошибку обработчику (проверьте переменную, которая была установлена)
- должен убедиться, что обработчик ошибок подключен
- Учитывая, что я могу выдать ошибку (вы можете написать то, что вам нравится здесь, потому что это не имеет значения)
- Когда потребитель вызываетя без обработчика ошибок (вызовите метод с нулевым обработчиком ошибок)
- Тогда я должен немедленно попросить потребителя не делать этого (проверьте исключение)