C# 断言A中的所有内容都属于B,B中的所有内容都属于A

C# 断言A中的所有内容都属于B,B中的所有内容都属于A,c#,.net,linq,C#,.net,Linq,我很自豪能自己提出这个Linq断言: bool assert1 = (from e in A select B.Contains<T>(e, new TComparer())) .All(x => x == true); bool assert2 = (from e in B select A.Contains<T>(e, new TComparer()))

我很自豪能自己提出这个Linq断言:

bool assert1 = (from e in A
               select B.Contains<T>(e, new TComparer()))
               .All(x => x == true);

bool assert2 = (from e in B
               select A.Contains<T>(e, new TComparer()))
               .All(x => x == true);

Assert(assert1 && assert2);
这将通过包含相同的元素(即A)来检查A和B是否相等⊆ B和B⊆ A

有没有更漂亮的方法

那么:

Assert.IsTrue(A.SequenceEqual(B, new SomeEqualityComparer()));
在注释中进行了澄清之后,我添加了序列排序。无论如何,两个序列都应该包含相同数量的元素

OrderSequence(A).SequenceEqual(OrderSequence(B), new SomeEqualityComparer());

private static IEnumerable<StudentClass> OrderSequence(IEnumerable<StudentClass> left)
{
    IComparer<StudentClass> comparer = new TComparer();
    return left.OrderBy(a => a, comparer);
}
那么:

Assert.IsTrue(A.SequenceEqual(B, new SomeEqualityComparer()));
在注释中进行了澄清之后,我添加了序列排序。无论如何,两个序列都应该包含相同数量的元素

OrderSequence(A).SequenceEqual(OrderSequence(B), new SomeEqualityComparer());

private static IEnumerable<StudentClass> OrderSequence(IEnumerable<StudentClass> left)
{
    IComparer<StudentClass> comparer = new TComparer();
    return left.OrderBy(a => a, comparer);
}
我会这样做:

IComparer<T> comparer = new TComparer();
bool equal = !A.Except(B, comparer).Any() && !B.Except(A, comparer).Any();
我会这样做:

IComparer<T> comparer = new TComparer();
bool equal = !A.Except(B, comparer).Any() && !B.Except(A, comparer).Any();

您使用什么库进行断言?如果它是NUnit,那么就有一个CollectionAssert类,它有一个等价的方法来处理这类事情


Linq对于集合转换来说是非常优雅的,但这正是一种任务,如果集合足够大,它会对性能造成巨大的影响。您需要一个临时的基于哈希表的集合哈希集或字典,并使用专门的方法来快速执行。

您使用什么库来进行断言?如果它是NUnit,那么就有一个CollectionAssert类,它有一个等价的方法来处理这类事情


Linq对于集合转换来说是非常优雅的,但这正是一种任务,如果集合足够大,它会对性能造成巨大的影响。您需要一个临时的基于哈希表的集合哈希集或字典,以及专门的方法来快速完成此任务。

Enumerable.SequenceEqualother仅当它们作为序列相等时才为true;i、 例如,它们有相等数量的元素,A.First等于B.First根据SomeEqualityComparer,A.Skip1.First等于B.Skip1.First根据SomeEqualityComparer,等等。Enumerable.SequenceEqualother仅当它们作为序列相等时才为真;i、 例如,它们有相等数量的元素,A.First等于B.First根据某个等式比较,A.Skip1.First等于B.Skip1.First根据某个等式比较,等等。好的观点。然而,在我的特殊情况下,集合是在语法上以MbUnit==NUnit测试相等性的对象的成员,我相信,因此,通过调用actuall断言,可以检查上面的内容。这些集合在大多数情况下都是好的。然而,在我的特殊情况下,集合是在语法上以MbUnit==NUnit测试相等性的对象的成员,我相信,因此,通过调用actuall断言,可以检查上面的内容。在大多数情况下,集合是