我想验证多个参数并抛出一个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));
但它似乎容易出错,重复的参数......而且,老实说,只是不漂亮。
有这样做的好方法吗?理想情况下不使用任何外部库。