SORU
3 NİSAN 2009, Cuma


C karşılaştırarak dizileri#

Birbirleri ile iki diziyi karşılaştırmak için çalışıyorum. Bu kodu denedim ve aşağıdaki hataları aldım.

static bool ArraysEqual(Array a1, Array a2)
{
    if (a1 == a2)
        return true;

    if (a1 == null || a2 == null)
        return false;

    if (a1.Length != a2.Length)
        return false;

    IList list1 = a1, list2 = a2; //error CS0305: Using the generic type 'System.Collections.Generic.IList<T>' requires '1' type arguments
    for (int i = 0; i < a1.Length; i  )
    {
        if (!Object.Equals(list1[i], list2[i])) //error CS0021: Cannot apply indexing with [] to an expression of type 'IList'(x2)
            return false;
    }
    return true;
}

Neden böyle bir hata alabilirim? Düşük teknolojili bir çözüm için gittim ve gayet iyi çalışıyor, ama kopyala/her tür için birkaç kez yapıştırmak için istiyorum bunu.

static bool ArraysEqual(byte[] a1, byte[] a2)
{
    if (a1 == a2)
        return true;

    if (a1 == null || a2 == null)
        return false;

    if (a1.Length != a2.Length)
        return false;

    for (int i = 0; i < a1.Length; i  )
    {
        if (a1[i] != a2[i])
            return false;
    }
    return true;
}

CEVAP
3 NİSAN 2009, Cuma


"Neden böyle bir hata alıyorum?" - muhtemelen, yok "using System.Collections;" dosyasının en üstünde sadece "using System.Collections.Generic;" - ancak, jenerik muhtemelen daha güvenli - aşağıya bakın:

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Hot For Nutrition

    Hot For Nutr

    26 ŞUBAT 2007
  • jkimisyellow

    jkimisyellow

    6 Mayıs 2009
  • MndsgnVEVO

    MndsgnVEVO

    26 Kasım 2013