如何确定两个字符串数组是否与其他字符串相等

时间:2011-06-01 05:05:36

标签: c#

  

可能重复:
  Comparing two List<string> for equality

如何判断两个字符串数组是否相等?

我使用了它,但它不起作用,即使两者的内容相同。

string[] array1 = new string[]{"A" , "B"}

string[] array2 = new string[]{"A" , "B"}

if(array1 == array2)  // it return false !!!!
{
  // 
}

4 个答案:

答案 0 :(得分:13)

如果您有权访问Linq,请使用SequenceEqual。否则,只需提供代码以首先检查数组是否长度相等,然后如果每个索引的项目相等。

答案 1 :(得分:6)

在StackOverflow上查看以下内容。我相信你要找的是以下内容。 Comparing arrays in C#

var arraysAreEqual = Enumerable.SequenceEqual(array1, array2);

答案 2 :(得分:3)

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;
}

答案 3 :(得分:3)

您可以像这样使用.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具有允许使用自定义比较器的优势。