验证参数

下列准则有助于确保正确验证参数。

一定要验证传递给公共的、受保护的或显式实现的成员的参数。 如果验证失败,则引发 System.ArgumentException 或其派生类之一。

此准则不要求验证代码在公共可见成员中。 将参数传递给处理验证的内部方法是可以接受的。

如果传递了一个空参数而成员不支持空(在 Visual Basic 中为 Nothing)参数,则应引发 System.ArgumentNullException。

一定要验证枚举参数。

不能假设枚举参数为在枚举中定义的值,因为公共语言运行时 (CLR) 支持将任何整数值强制转换为枚举值,而不论该值是否在枚举中定义。

不要将 System.Enum.IsDefined(System.Type,System.Object) 用于枚举范围检查,因为它是基于枚举的运行时类型,而该类型会随版本的不同而有所更改。

较高版本的库可向提供的枚举添加值。 使用 IsDefined 验证数据是危险的,因为现有代码(它不处理新值)将视该新值为有效的输入,原因是 IsDefined 为新值返回 true。 检查输入是否在程序可支持的值范围中,如果不在,则引发一个异常。

应注意传递的可变参数在经过验证后可能已发生了更改。

如果成员是安全敏感的,则制作可变对象的私有副本并使用该副本进行验证和处理。 这仅适用于可变数据。 不需要复制不可变数据(如 Uri 对象)。

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

概念

参数设计

其他资源

成员设计准则

类库开发的设计准则