Эки массивде C # эквиваленттүү элементтер камтылса кантип эффективдүү тестирлөө керек?

Менин эки массивим бар жана аларда бир эле нерселер бар-жогун билгим келет. Барабар (object obj) иштебейт, анткени массив шилтеме түрү болуп саналат. Мен өз аракетимди төмөндө жарыяладым, бирок бул жалпы иш экендигине көзүм жеткендиктен, андан дагы жакшы сыноо бар же жок экендигин билгим келет.

    public bool ContainsEquivalentSequence<T>(T[] array1, T[] array2)
    {
        bool a1IsNullOrEmpty = ReferenceEquals(array1, null) || array1.Length == 0;
        bool a2IsNullOrEmpty = ReferenceEquals(array2, null) || array2.Length == 0;
        if (a1IsNullOrEmpty) return a2IsNullOrEmpty;
        if (a2IsNullOrEmpty || array1.Length != array2.Length) return false;
        for (int i = 0; i < array1.Length; i++)
            if (!Equals(array1[i], array2[i]))
                return false;
        return true;
    }

Update - System.Linq.Enumerable.SequenceEqual жакшыраак эмес

I булагын чагылдырган жана ал циклди аткарганга чейинки узундукту салыштырбайт . Бул ыкма T [] үчүн эмес, көбүнчө IEnumerable үчүн иштелип чыккандыктан, бул мааниге ээ.

    public static bool SequenceEqual<TSource>(this IEnumerable<TSource> first, IEnumerable<TSource> second, IEqualityComparer<TSource> comparer)
    {
        if (comparer == null)
        {
            comparer = EqualityComparer<TSource>.Default;
        }
        if (first == null)
        {
            throw Error.ArgumentNull("first");
        }
        if (second == null)
        {
            throw Error.ArgumentNull("second");
        }
        using (IEnumerator<TSource> enumerator = first.GetEnumerator())
        {
            using (IEnumerator<TSource> enumerator2 = second.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    if (!enumerator2.MoveNext() || !comparer.Equals(enumerator.Current, enumerator2.Current))
                    {
                        return false;
                    }
                }
                if (enumerator2.MoveNext())
                {
                    return false;
                }
            }
        }
        return true;
    }
10
задан smartcaveman 16 August 2011 в 23:46
поделиться