C#: Утверждение так, что исключение выдается, если условие не выполнено - PullRequest
0 голосов
/ 09 марта 2020

Я недавно начал записывать утверждения в свой код, но обнаружил, что и с Debug.Assert, и с Trace.Assert выполнение продолжается, если условие не выполняется. Есть ли встроенный эквивалент, который будет выдавать исключение, если условие не выполняется? Или я должен написать свой собственный? Я хочу создать исключение, чтобы я не продолжал писать что-то, что находится в неожиданном состоянии.

РЕДАКТИРОВАТЬ: у меня есть код, похожий на то, что ниже. Это в запросе PUT, поэтому я хочу обновить существующий ресурс (в идеале идентифицируемый по Id, но также по GUID в случае частичного сохранения ранее). При сохранении нового ресурса я хочу убедиться, что указан GUID.

public int Save(Guid? personGuid, Person person)
{
    if (person.Id > 0)
    {
        Update(person);
    }

    Trace.Assert(personGuid.HasValue);
    SaveToDb(personGuid, person);
}

Примечание: опция Define TRACE constant отмечена.

1 Ответ

2 голосов
/ 09 марта 2020

Обычным способом было бы проверить предварительные условия в начале метода и просто выдать исключение, если они не выполняются. Если существуют проверки, которые являются общими для многих методов, один шаблон должен добавить метод «ThrowIfInvalid» и вызвать его во всех методах publi c.

Существует также Кодовые контракты , которые могут помочь в объявлении предварительных условий и броске в случае их неудачи. Т.е.

Contract.Requires<ArgumentNullException>(personGuid.HasValue, "...");
...