人们在管理你的类中的guard clause爆炸时采取了什么方法(如果有的话)?例如:
public void SomeMethod<T>(string var1, IEnumerable<T> items, int count)
{
if (string.IsNullOrEmpty(var1))
{
throw new ArgumentNullException("var1");
}
if (items == null)
{
throw new ArgumentNullException("items");
}
if (count < 1)
{
throw new ArgumentOutOfRangeException("count");
}
... etc ....
}在我目前工作的项目中,有许多类在公共方法上有一组类似的保护子句。
我知道.NET 4.0代码合同,但这不是我们团队目前的选择。
发布于 2009-10-21 07:40:53
我见过的很多项目都使用静态Guard类。
public static class Guard {
public static void ArgumentIsNotNull(object value, string argument) {
if (value == null)
throw new ArgumentNullException(argument);
}
}在我看来,这使得代码更加清晰。
Guard.ArgumentIsNotNull(arg1, "arg1");发布于 2009-10-20 23:35:50
如果你不想走代码契约的路线,一种简化它的方法是去掉大括号:
public void SomeMethod<T>(string var1, IEnumerable<T> items, int count)
{
if (string.IsNullOrEmpty(var1))
throw new ArgumentNullException("var1");
if (items == null)
throw new ArgumentNullException("items");
if (count < 1)
throw new ArgumentOutOfRangeException("count");
... etc ....
}除此之外,如果你的反对意见是.Net 4.0还不是黄金时间,你可以用一些方法来模拟代码契约:
http://geekswithblogs.net/Podwysocki/archive/2008/01/22/118770.aspx
发布于 2009-10-21 08:03:51
您可以考虑重构到Introduce a Null Object。
https://stackoverflow.com/questions/1597884
复制相似问题