听起来很基本,但我没有找到现有的答案。对不起,如果它是重复的。
我过去从未使用过很多断言,但我可能还没有理解它们背后的精神。建议或标准做法是在方法Remove()中编写类似下面的内容吗?
public class Model
{
public Model ParentModel {get; private set}
readonly List<Model> submodels = new List<Model>();
public Model AddSubmodel(Model m)
{
submodels.Add(m);
m.ParentModel = this;
}
public void RemoveSubmodel(Model m)
{
submodel.Remove(m);
m.ParentModel = null;
}
public void Remove()
{
Debug.Assert(ParentModel != null);
if (ParentModel != null) ParentModel.RemoveSubmodel(this);
}
// ...
}
条件是我可以控制的(即它不依赖于用户交互或其他东西)并且它确定了我的代码的正确性,因此异常就出来了。
我的理由是,我希望它在调试模式下失败,但我想在发布模式下尽可能地修复它。
编辑:正如评论中已提到的,
违反条件的行为不是非常致命的。如果没有父节点,除了没有空检查的方法调用失败之外,什么都不会发生(在发布版本中)。
但更重要的是,它表明Model类的客户端正在做一些不合逻辑的事情。我想指出一个事实(至少在调试期间)我的客户端代码中有一些我显然没有想过的东西,因为如果我有,那么条件就不会发生。