验证参数
更新:2007 年 11 月
下列准则有助于确保正确验证参数。
一定要验证传递给公共的、受保护的或显式实现的成员的参数。如果验证失败,则引发 System.ArgumentException 或其派生类之一。
此准则不要求验证代码在公共可见成员中。将参数传递给处理验证的内部方法是可以接受的。
一定要验证枚举参数。
不能假设枚举参数为在枚举中定义的值,因为公共语言运行库 (CLR) 支持将任何整数值强制转换为枚举值,而不论该值是否在枚举中定义。
不要将 System.Enum.IsDefined(System.Type,System.Object) 用于枚举范围检查,因为它是基于枚举的运行库类型,而该类型会随版本的不同而有所更改。
较高版本的库可向提供的枚举添加值。使用 IsDefined 验证数据是危险的,因为现有代码(它不处理新值)将视该新值为有效的输入,原因是 IsDefined 为新值返回 true。检查输入是否在程序可支持的值范围中,如果不在,则引发一个异常。
应注意传递的可变参数在经过验证后可能已发生了更改。
如果成员是安全敏感的,则制作可变对象的私有副本并使用该副本进行验证和处理。这仅适用于可变数据。不需要复制不可变数据(如 Uri 对象)。
部分版权所有 2005 Microsoft Corporation。保留所有权利。
部分版权所有 Addison-Wesley Corporation。保留所有权利。
有关设计指南的更多信息,请参见 Krzysztof Cwalina 和 Brad Abrams 编著、Addison-Wesley 于 2005 年出版的“Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries”(《框架设计指南:可重用 .NET 库的约定、术语和模式》)。