【发布时间】:2011-06-01 05:05:35
【问题描述】:
如何判断两个字符串数组是否相等?
我用过这个,但它不起作用,即使两者的内容相同。
string[] array1 = new string[]{"A" , "B"}
string[] array2 = new string[]{"A" , "B"}
if(array1 == array2) // it return false !!!!
{
//
}
【问题讨论】:
标签: c#
如何判断两个字符串数组是否相等?
我用过这个,但它不起作用,即使两者的内容相同。
string[] array1 = new string[]{"A" , "B"}
string[] array2 = new string[]{"A" , "B"}
if(array1 == array2) // it return false !!!!
{
//
}
【问题讨论】:
标签: c#
如果您有权访问 Linq,请使用 SequenceEqual。否则,只需提供代码以首先检查数组是否相等长度,然后检查每个索引处的项目是否相等。
【讨论】:
在 StackOverflow 上查看以下内容。我相信您正在寻找的是以下内容。 Comparing arrays in C#
var arraysAreEqual = Enumerable.SequenceEqual(array1, array2);
【讨论】:
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;
}
【讨论】:
您可以像这样使用 .NET4 功能 Array.IStructuralEquatable.Equals:
IStructuralEquatable equ = array1;
bool areEqual = equ.Equals(array2, EqualityComparer<string>.Default);
这也可以写成一行:
bool areEqual = (array1 as IStructuralEquatable).Equals(array2, EqualityComparer<string>.Default);
使用IStructuralEquatable 的优点是允许使用自定义比较器。
【讨论】: