Ну, нет, если не считать:
public void Foo(string x, object y, Stream z, int a)
{
CheckNotNull(x, y, z);
...
}
public static void CheckNotNull(params object[] values)
{
foreach (object x in values)
{
if (x == null)
{
throw new ArgumentNullException();
}
}
}
Чтобы избежать попадания в создание массива, вы можете иметь несколько перегрузок для различного числа аргументов:
public static void CheckNotNull(object x, object y)
{
if (x == null || y == null)
{
throw new ArgumentNullException();
}
}
// etc
Альтернативой может быть использование атрибутов для объявления, что параметры не должны быть нулевыми, и получение PostSharp для генерации соответствующих проверок:
public void Foo([NotNull] string x, [NotNull] object y,
[NotNull] Stream z, int a)
{
// PostSharp would inject the code here.
}
По общему признанию я вероятно хотел бы, чтобы PostSharp преобразовал это в Кодовые контракты вызовы, но я не знаю, насколько хорошо они играют вместе. Может быть один день, когда мы сможем написать Spec #-like:
public void Foo(string! x, object! y, Stream! z, int a)
{
// Compiler would generate Code Contracts calls here
}
... но не в ближайшее время :)