为了确保两个列表相同,在 nunit 中,我们可以使用 CollectionAssert.AreEquivalent
检查这两个列表是否包含相同的元素(顺序不重要)。
但是如何检查两个List<List<T>>
是等价的吗?这个想法是,如果一个 List<T>
具有与另一个相同的元素 List<T>
(同样,顺序不重要)那么它们是相等的。
最佳答案
您必须遍历它们以确保它们是等价的,但有一些重要的快捷方式:
如果它们实际上是同一个实例(并且在实际代码中经常出现这种情况),则
ReferenceEquals(x, y)
将返回 true。否则不会。如果ReferenceEquals
返回 true,则它们是等价的。如果一个为空而另一个不为空,那么显然它们不相等(如果它们都为空,您将在上面使用
ReferenceEquals
捕捉到这一点)。为了安全起见,您无论如何都需要测试 null,因此在许多情况下您还有另一个捷径。如果它们的大小不同,则(对于大多数等价定义,有异常(exception))它们不相等。立即返回 false。
一旦发现不匹配,就可以返回 false 而无需继续检查。
如果它们已经排序,比较它们会更快。如果您可以让它们保持排序,或者失败时跟踪它们是否已排序,然后仅在需要时进行排序,您可以大大加快速度。 (请注意,许多排序算法在对已排序的列表进行不必要的排序时会出现最坏情况)。
关于c# - 断言两个 List<List<T>> 彼此等价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3502713/