Я хотел бы проверить несколько параметров и выдать ArgumentNullException
, если какой-либо из них равен null
. Ради аргумента предположим, что у меня есть это:
public void DoSomething(SomeClass param1, SomeClass param2, SomeClass param3);
Конечно, я мог бы сделать:
if (param1 == null)
throw new ArgumentNullException(nameof(param1));
if (param2 == null)
throw new ArgumentNullException(nameof(param2));
if (param3 == null)
throw new ArgumentNullException(nameof(param3));
Но это не особенно красиво, особенно если это повторяющаяся проверка по всему приложению. Итак, я думал, что я сделаю это:
public static class ValidationExtensions
{
public static void NullCheck<T>(this T subject)
{
if (T == null)
throw new ArgumentNullException();
}
}
// ...
param1.NullCheck();
param2.NullCheck();
param3.NullCheck();
Но так я теряю nameof
. Я не могу сделать nameof(subject)
, так как это бессмысленно.
Конечно, это вариант:
public static class ValidationExtensions
{
public static void NullCheck<T>(this T subject, string parameterName)
{
if (T == null)
throw new ArgumentNullException(parameterName);
}
}
// ...
param1.NullCheck(nameof(param1));
param2.NullCheck(nameof(param2));
param3.NullCheck(nameof(param3));
Но, кажется, он склонен к ошибкам, с повторяющимися параметрами... и, честно говоря, просто некрасиво.
Есть ли хороший способ сделать это? В идеале без использования каких-либо внешних библиотек.
param1.NullCheck(nameof(param1));
кажется не таким уж плохим - он менее подвержен ошибкам, чем ваш первый вариант. Что подвержено ошибкам, так это просто создание исключений дляnull
. Наверное, лучше попробовать код вообще без исключений. Прочитайте это: Досадные исключения Эрика Липперта. - person Enigmativity   schedule 06.03.2019param1.NullCheck(nameof(param1));
определенно не конец света, но просто кажется, что должен быть способ сделать это таким образом, чтобы ссылаться наparam1
только один раз... - person user622505   schedule 06.03.2019