3 回答
TA贡献1821条经验 获得超6个赞
假设您有LINQ可用并且对性能不太在意,则最简单的事情如下:
var arraysAreEqual = Enumerable.SequenceEqual(a1, a2);
实际上,可能值得用Reflector或ILSpy检查这些SequenceEqual方法的实际作用,因为无论如何它都可以针对数组值的特殊情况进行优化!
TA贡献1886条经验 获得超2个赞
“为什么我会收到该错误?” -可能using System.Collections;文件的顶部没有“ ”-只有“ using System.Collections.Generic;”-但是,泛型可能更安全-参见下文:
static bool ArraysEqual<T>(T[] a1, T[] a2)
{
if (ReferenceEquals(a1,a2))
return true;
if (a1 == null || a2 == null)
return false;
if (a1.Length != a2.Length)
return false;
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = 0; i < a1.Length; i++)
{
if (!comparer.Equals(a1[i], a2[i])) return false;
}
return true;
}
TA贡献1829条经验 获得超7个赞
对于.NET 4.0及更高版本,您可以使用StructuralComparisons类型比较数组或元组中的元素:
object[] a1 = { "string", 123, true };
object[] a2 = { "string", 123, true };
Console.WriteLine (a1 == a2); // False (because arrays is reference types)
Console.WriteLine (a1.Equals (a2)); // False (because arrays is reference types)
IStructuralEquatable se1 = a1;
//Next returns True
Console.WriteLine (se1.Equals (a2, StructuralComparisons.StructuralEqualityComparer));
- 3 回答
- 0 关注
- 598 浏览
添加回答
举报