首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ArgumentException与ArgumentNullException?

ArgumentException与ArgumentNullException?
EN

Stack Overflow用户
提问于 2011-12-11 04:48:27
回答 4查看 7.1K关注 0票数 23

我正在重构一些代码,并添加一个方法来替换即将被弃用的方法。新方法具有以下签名:

代码语言:javascript
复制
FooResult Foo(FooArgs args) { ... }

不推荐使用的方法包含越来越多的参数。这些参数现在是FooArgs类的属性。不推荐使用的方法有几个保护条件,它们使用以下结构检查空值:

代码语言:javascript
复制
if (parameter1 == null)
    throw new ArgumentNullException(“parameter1”);
if (parameter... == null)
    throw new ArgumentNullException(“parameter...”);
if (parameterN == null)
    throw new ArgumentNullException(“parameterN”);

现在参数已经折叠到FooArgs类中,我应该为FooArgs参数的各个属性抛出一个ArgumentNullException

代码语言:javascript
复制
if (args.Property1 == null)
    throw new ArgumentNullException(“args.Property1”);
if (args.Property... == null)
    throw new ArgumentNullException(“args.Property...”);
if (args.PropertyN == null)
    throw new ArgumentNullException(“args.PropertyN”);

或者为整个 FooArgs参数抛出一个更通用的ArgumentException

代码语言:javascript
复制
if (args.Property1 == null)
    throw new ArgumentException(“Property1 cannot be null.”, “args”);
if (args.Property... == null)
    throw new ArgumentException(“Property... cannot be null.”, “args”);
if (args.PropertyN == null)
    throw new ArgumentException(“Property2 cannot be null.”, “args”);

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-12-11 04:52:19

您需要添加一个检查,以使args本身不为空。ANE不适用于单个组件,因此您需要使用更通用的AE,如下所示:

代码语言:javascript
复制
if (args == null)
    throw new ArgumentNullException(“args”);
if (args.Property1 == null)
    throw new ArgumentException(“Property1 cannot be null.”, “args”);
if (args.Property... == null)
    throw new ArgumentException(“Property... cannot be null.”, “args”);
if (args.PropertyN == null)
    throw new ArgumentException(“Property2 cannot be null.”, “args”);
票数 28
EN

Stack Overflow用户

发布于 2011-12-11 05:12:21

虽然我完全同意dasblinkenlight的回答,但您可能还想考虑将FooArgs的验证转移到FooArgs类本身中,如果这个类是专门用来移动参数的,那么它很可能不具有null属性,在这种情况下,我会允许它的构造函数进行它的验证。

票数 10
EN

Stack Overflow用户

发布于 2011-12-11 04:53:46

在这种情况下,最好检查该方法内部的FooArgs参数是否为空引用,如果传入了空引用,则抛出ArgumentNullException。然后,如果其他方法或代码段使用args类中包含的参数,则它们应该对此进行检查并在必要时抛出异常。但是,如果接受args类的方法是使用所有参数的方法,那么最好按照您的建议检查该方法中的有效参数。

此外,仅对空引用的参数使用ArgumentNullException。如果它只是一个无效值(例如,一个空字符串),那么您应该使用更通用的ArgumentException

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

https://stackoverflow.com/questions/8459755

复制
相关文章

相似问题

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