我最近开始将断言写入我的代码中,但是发现同时使用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
选项被选中。
通常的方法是在方法开始时检查前提条件,如果不满足则简单地抛出异常。如果许多方法之间存在相同的检查,则一种模式是添加“ ThrowIfInvalid”方法并在所有公共方法中调用它。
还有Code contracts可以帮助声明前提条件,如果前提条件失败则抛出。即
Contract.Requires<ArgumentNullException>(personGuid.HasValue, "...");