按值比较迭代类型(IEnumerables及其亲属)(以检查相等性)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按值比较迭代类型(IEnumerables及其亲属)(以检查相等性)相关的知识,希望对你有一定的参考价值。

When I'm running unit tests, I find it very annoying to have to check equality within loops when I've got two collections of data. I know of no built-in way (let me know if there is one) [Edit: [CollectionAssert](http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.collectionassert.aspx) does it. Sometimes you need to turn your IEnumerables into arrays, though, using .ToArray()] to compare two collections' values (such as an array of bytes compared to a list of bytes), so I made this extension method to do it.
  1. public static class Extensions
  2. {
  3. static void Main()
  4. {
  5. var actual = new List<byte>();
  6. actual.AddRange(0x01, 0xFF);
  7. var expected = new byte[] {0x01, 0xFF};
  8. Assert.IsTrue(actual.Value.EqualsByValues(expected.Value));
  9. }
  10. /// <summary>
  11. /// Compare objects by their values.
  12. /// </summary>
  13. /// <param name="a"></param>
  14. /// <param name="b"></param>
  15. /// <returns></returns>
  16. public static bool EqualsByValues<T>(this IEnumerable<T> a, IEnumerable<T> b)
  17. {
  18. var aEnum = a.GetEnumerator();
  19. var bEnum = b.GetEnumerator();
  20. while (aEnum.MoveNext())
  21. {
  22. bEnum.MoveNext();
  23. if (!aEnum.Current.Equals(bEnum.Current))
  24. {
  25. return false;
  26. }
  27. }
  28. return true;
  29. }
  30. }

以上是关于按值比较迭代类型(IEnumerables及其亲属)(以检查相等性)的主要内容,如果未能解决你的问题,请参考以下文章

按值传递--

如何展平 IEnumerables 的 IEnumerables 的串联

迭代法,穷举法及其练习题

按值删除向量中的元素

csharp 在C#中按值比较两个对象

如何将子集集合按值(结构平等)与 FluentAssertions 进行比较?