当我期望相等的两个值不相等时,抛出什么异常?(c#)

本文关键字:异常 什么 不相等 两个 期望 | 更新日期: 2023-09-27 18:01:41

我觉得这必须是一个副本,但我试着四处寻找,找不到我要找的东西。

我正在处理的示例从解析XML文档开始。在这个XML文档中,一个人的姓名在两个不同的位置表示。稍后在另一种方法中,我需要使用这个人的名字。我可以在XML文档中使用这两种对人名的引用中的任何一种,因为它们是相同的,至少我希望如此。我首先要检查它们是否确实相同。如果它们由于某种原因不相等,我觉得最好抛出一个异常。是否存在这样一种例外,即人们认为相等的两个值实际上并不相等?

我考虑了ArgumentException,但我不确定这是否最好,因为它指定:

ArgumentException被抛出当一个方法被调用时,至少一个的参数说明不符合被调用的方法

这里不是这种情况,因为参数很好,只是其中一个属性的值(即人的名字)不是我期望的。

我想你可能会问的第一个问题是为什么要抛出异常。也许这不是最好的选择,但我觉得应该这样做,因为这两个名称不匹配的原因是在创建XML文档时,其中一个名称写入器没有正确地完成它的工作,这是我可能想知道的。我没有错误处理的经验,所以这可能并不意味着应该抛出异常。如有任何建议,不胜感激。

当我期望相等的两个值不相等时,抛出什么异常?(c#)

我首先要检查它们是否确实相同。如果它们由于某种原因不相等,我觉得最好抛出一个异常。

您可以使用InvalidOperationException,因为您的操作期望值相等。如果值不相等,则操作无效。

还可以定义自己的异常。之后,您可以根据您的情况/要比较的对象自定义异常。

这应该是一个代码契约:如果输入XML提供了两次名称,您的代码将无法工作。这是你的代码正常工作的要求

因此,我将在方法的开头创建一个List<string>,并在XML中积累找到的名称。一旦你需要使用全名,我会用代码契约检查列表:
Contract.Assert(names != null && names.Count > 0);
Contract.Assert(names.Skip(1).All(name => name == names[0]));