Проверка предварительных условий в .NET - PullRequest
12 голосов
/ 07 марта 2011

Я фанат стратегии «провал рано» и хочу проверить, например, что параметры методов имеют правильные значения. В Java я бы использовал что-то вроде Гуава :

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

Есть ли что-то подобное для .NET?

Ответы [ 4 ]

7 голосов
/ 07 марта 2011

То, что вы хотите сделать, это Дизайн по контракту .

Вы должны использовать Кодовые контракты для определения контрактов, т.е. предварительных условий, постусловий и инвариантов для ваших типов\ method in C #.

IMO лучший и наиболее полный охват кодовых контрактов - здесь .

5 голосов
/ 07 марта 2011
4 голосов
/ 07 марта 2011

Кодовые контракты все еще являются дополнением / не являются частью стандартной установки Visual Studio, но они позволяют выражать предварительные и последующие условия и инварианты объектов.

Различные вариантыдоступны для принудительного исполнения контрактов в виде проверок во время компиляции или во время выполнения (или оба).

1 голос
/ 07 марта 2011

Взгляните на CuttingEdge.Conditions . Это позволяет вам свободно написать ваши предварительные условия следующим образом:

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));
}

Вам необходимо C # 3.0 или VB.NET 9.0 с .NET 2.0 или более поздней версии для CuttingEdge.Conditions.

...