Бросок пустой ссылки на пустую строку может сильно сбить с толку - значение по умолчанию для строки равно нулю и будет указывать на неинициализированную строку, тогда как пустая строка может представлять другие проблемы.
Мне нравится идея Джона Скита, однако мне нравится явно использовать throw, а не иметь отдельную функцию.
Вместо этого вы можете бросить следующий класс:
public class ArgumentNullOrEmptyException : ArgumentNullException
{
#region Properties And Fields
private static string DefaultMessage => $"A value cannot be null or empty{Environment.NewLine}";
#endregion
#region Construction and Destruction
public ArgumentNullOrEmptyException()
: base(DefaultMessage)
{
}
public ArgumentNullOrEmptyException(string paramName)
: base(paramName,
$"{DefaultMessage}" +
$"Parameter name: {paramName}")
{
}
public ArgumentNullOrEmptyException(string message, Exception innerException)
: base($"{DefaultMessage}{message}", innerException)
{
}
public ArgumentNullOrEmptyException(string paramName, string message)
: base(paramName,
$"{DefaultMessage}" +
$"Parameter name: {paramName}{Environment.NewLine}" +
$"{message}")
{
}
#endregion
public static void ThrowOnNullOrEmpty(string paramName, string paramValue)
{
if(string.IsNullOrEmpty(paramValue))
throw new ArgumentNullOrEmptyException(paramName);
}
public static void ThrowOnNullOrEmpty(string paramValue)
{
if (string.IsNullOrEmpty(paramValue))
throw new ArgumentNullOrEmptyException();
}
public static void ThrowOnNullOrEmpty(string paramName, object paramValue)
{
//ThrowOnNullOrEmpty another object that could be 'empty'
throw new NotImplementedException();
}
}
private static void AFunctionWithAstringParameter(string inputString)
{
if(string.IsNullOrEmpty(inputString)) throw new ArgumentNullOrEmptyException(nameof(inputString));
//Or ..
ArgumentNullOrEmptyException.ThrowOnNullOrEmpty(nameof(inputString), inputString);
}
Обратите внимание, что мой производный тип вызывает только базовый класс исключений вместо переопределения свойства сообщения. Это связано с тем, что в «дополнительной информации» отладчика Visual Studio указано внутреннее сообщение, а не переопределенный тип. Это означает, что это единственный способ красиво отобразить сообщение во время отладки.