Eri*_*ver 8 .net c# validation parameters attributes
是否有标准框架(可能是Enterprise Library ...或.NET本身的一部分),允许您在方法属性中进行常见的参数验证?
Microsoft Enterprise Library具有Microsoft.Practices.EnterpriseLibrary.Validation库/命名空间,允许使用属性进行验证.
Microsoft 代码契约自 4.0 CTP 起成为 .NET Framework 的一部分,并且可作为独立包用于早期 .NET Framework 版本,允许指定编码假设。这包括指定可以验证参数的前提条件。
参数检查的一个示例用途是(从代码合同文档复制):
public Rational(int numerator, int denominator)
{
Contract.Requires(denominator ! = 0);
this.numerator = numerator;
this.denominator = denominator;
}
Run Code Online (Sandbox Code Playgroud)
使用代码契约的好处是,它是一个库,将成为未来 .NET Framework 版本的一部分,因此迟早您的应用程序中会减少一个依赖项。
编辑:刚刚注意到您特别要求一个使用属性进行参数检查的库......而代码契约则没有。代码合约不使用属性的原因在其常见问题解答中列出:
使用自定义属性的优点是它们根本不会影响代码。然而,使用方法调用的好处远远超过了看似自然的属性首选:
运行时支持:如果不依赖于二进制重写器,则无法在运行时强制执行用属性表示的契约。这意味着,如果您希望在运行时强制执行先决条件(或其他契约),则需要在代码中复制这些契约,或者在构建过程中包含二进制重写器。Contract.RequiresAlways 既充当声明性契约,又充当运行时检查的验证。
解析需求:由于可与自定义属性一起使用的值有限,因此条件最终会被编码为字符串。这需要定义一种适用于所有源语言的新语言,需要解析字符串,复制编译器已经拥有的所有功能。
缺乏 IDE 支持:以字符串表示,不支持 Intellisense、类型检查或重构,所有这些都可用于将合约编写为代码。
| 归档时间: |
|
| 查看次数: |
4661 次 |
| 最近记录: |