Я думаю, вы должны использовать следующий шаблон:
using System;
public static class MyExtensions
{
/// <summary>
/// Magic method.
/// </summary>
/// <param name="source">
/// The source array.
/// </param>
/// <exception cref="ArgumentNullException">
/// <paramref name="source" /> is <c>null</c>.
/// </exception>
/// <returns>
/// Some magic value only you know about.
/// </returns>
public static int SomeMethod(this int[] source)
{
if (source == null)
throw new ArgumentNullException(nameof(source));
return 42;
}
}
Почему?
- вы выставили
ThrowExcIfNull
как метод расширения, это довольно странно, если честно
- если вы посмотрите на https://referencesource.microsoft.com/#q=throwif, вы увидите, что они никогда не будут публичными
- за исключением
CancellationToken.ThrowIfCancellationRequested
, но это исключительная ситуация
Если вам абсолютно нужен такой метод
По крайней мере, передайте имя параметра, чтобы его было легче отлаживать:
using System;
public static class MyExtensions
{
public static int SomeMethod(this int[] source)
{
ThrowIfNull(source, nameof(source));
return 42;
}
private static void ThrowIfNull(object value, string parameter)
{
if (value == null)
throw new ArgumentNullException(parameter);
}
}
Но теперь у вас есть другая проблема, первый метод, показанный в трассировке стека, будет ThrowExcIfNull
:
Просто посмотрите на разницу без использования этого вспомогательного метода:
Совершенно ясно, откуда возникла ошибка.
Возможно, вам понадобится этот метод:
- если вы используете его буквально в сотнях мест
- если сообщения должны быть переведены в культуру пользователя, например, на китайский язык
- и т.д. * * тысяча пятьдесят один