首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重构Guard子句

重构Guard子句
EN

Stack Overflow用户
提问于 2009-10-20 23:27:40
回答 5查看 17K关注 0票数 35

人们在管理你的类中的guard clause爆炸时采取了什么方法(如果有的话)?例如:

代码语言:javascript
复制
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代码合同,但这不是我们团队目前的选择。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-21 07:40:53

我见过的很多项目都使用静态Guard类。

代码语言:javascript
复制
public static class Guard {
    public static void ArgumentIsNotNull(object value, string argument) {
        if (value == null)
            throw new ArgumentNullException(argument);
    }
}

在我看来,这使得代码更加清晰。

代码语言:javascript
复制
Guard.ArgumentIsNotNull(arg1, "arg1");
票数 60
EN

Stack Overflow用户

发布于 2009-10-20 23:35:50

如果你不想走代码契约的路线,一种简化它的方法是去掉大括号:

代码语言:javascript
复制
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

票数 4
EN

Stack Overflow用户

发布于 2009-10-21 08:03:51

您可以考虑重构到Introduce a Null Object

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1597884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档