Предварительные условия контракта в конструкторе с пустым телом

Доброе утро! Я пишу класс для рисования гистограмм и, для удобства пользователя, решил добавить несколько удобных конструкторов.

Однако, как только я недавно перешел на контракты кода .NET от DevLabs, я хочу в полной мере использовать предварительные условия для защиты от моей (или чьей-либо) глупости.

    public HistoGrapher(IList<string> points, IList<T> values)
        : this(points.Select((point, pointIndex) => new KeyValuePair<string, T>(point, values[pointIndex])))
    {
        Contract.Requires<ArgumentNullException>(points != null, "points");
        Contract.Requires<ArgumentNullException>(values != null, "values");
        Contract.Requires<ArgumentException>(points.Count == values.Count, "The lengths of the lists should be equal.");
    }

    public HistoGrapher(IEnumerable<KeyValuePair<string, T>> pointValuePairs)
    {
        // useful code goes here
    }

Есть кое-что, что меня смущает. Я не хочу, чтобы первый конструктор когда-либо вызывал второй, если контракт нарушен; однако предполагается, что вызов this (...) будет выполнен до выполнения тела первого конструктора.

Будет ли этот код работать так, как я хочу? Я еще не пробовал. А если нет, есть ли возможность решить такую ​​проблему?

8
задан Christopher Bottoms 12 May 2015 в 12:38
поделиться