12

我是“尽早失败”策略的粉丝,并且想检查方法参数是否具有正确的值。在 Java 中,我会使用Guava 之类的东西:

checkArgument(count > 0, "must be positive: %s", count);

.NET 有类似的东西吗?

4

4 回答 4

7

您要做的是按合同设计

您应该使用代码契约来定义契约,即 C# 中类型\方法的前置条件、后置条件和不变量。

IMO 最好和最全面的代码合同覆盖在这里

于 2011-03-07T09:43:33.107 回答
5

代码合同:http: //msdn.microsoft.com/en-us/devlabs/dd491992

于 2011-03-07T09:10:39.277 回答
4

代码协定仍然是标准 Visual Studio 安装的附加组件/不是一部分,但它们确实允许您表达前置条件和后置条件以及对象不变量。

不同的选项可用于将合同作为编译时或运行时检查(或两者)来执行。

于 2011-03-07T09:11:39.657 回答
1

Take a look at CuttingEdge.Conditions. It allows you to write your preconditions in a fluent manner, as follows:

ICollection GetData(int? id, string xml, IEnumerable<int> col)
{
    Condition.Requires(id, "id")
        .IsNotNull()
        .IsInRange(1, 999)
        .IsNotEqualTo(128);

    Condition.Requires(xml, "xml")
        .StartsWith("<data>")
        .EndsWith("</data>")
        .Evaluate(xml.Contains("abc") || xml.Contains("cba"));

    Condition.Requires(col, "col")
        .IsNotNull()
        .IsNotEmpty()
        .Evaluate(c => c.Contains(id.Value) || c.Contains(0));
}

You need C# 3.0 or VB.NET 9.0 with .NET 2.0 or up for CuttingEdge.Conditions.

于 2011-03-07T09:37:26.817 回答