在公共方法中至少验证所有参数是一个好的实践。这有助于更快地定位错误并且在阅读代码时也很有帮助,因为它描述了方法的契约。
我们实现了一个静态类AssertUtilities
,其中包含一堆用于参数和状态验证的方法。我相信有些人将这样的类称为Guard
。
例如:
public static void ArgumentNotNull(object argument, string argumentName)
{
if (argument == null)
throw new ArgumentNullException(argumentName);
}
public static void ArgumentInRange(decimal argument, decimal minValue, decimal maxValue, string argumentName)
{
if (argument < minValue || argument > maxValue)
{
throw new ArgumentOutOfRangeException(
argumentName,
FormatUtilities.Format("Argument out of range: {0}. Must be between {1} and {2}.", argument, minValue, maxValue));
}
}
public static void ArgumentState(bool expression, string argumentName, string formatText, params object[] args)
{
if (!expression)
throw new ArgumentException(FormatUtilities.Format(formatText, args), argumentName);
}
public static void ArgumentHasText(string argument, string argumentName)
{
ArgumentNotNull(argument, argumentName);
ArgumentState(argument.Length > 0, argumentName, "Argument cannot be an empty string.");
}
arguments
标签在这里似乎有两个意思,哈哈。 - BoltClock