Die Implementierung von SequenceEqual
ist eine Art ähnlich ::
using (IEnumerator<TSource> enumerator1 = first.GetEnumerator())
using (IEnumerator<TSource> enumerator2 = second.GetEnumerator())
{
while (enumerator1.MoveNext())
{
if (!enumerator2.MoveNext() || !comparer.Equals(enumerator1.Current, enumerator2.Current))
{
return false;
}
}
if (enumerator2.MoveNext())
{
return false;
}
}
return true;
Dieser Standard SequenceEqual
Methode verwenden Sie den Standard EqualityComparer<int>.Default
für int
die Wertgleichheit ist.
Array
IStructuralEquatable
mit Equal
Methode implementieren:
bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
{
if (other == null) return false;
if (!object.ReferenceEquals(this, other))
{
Array array = other as Array;
if ((array == null) || (array.Length != this.Length))
{
return false;
}
for (int i = 0; i < array.Length; i++)
{
object x = this.GetValue(i);
object y = array.GetValue(i);
if (!comparer.Equals(x, y))
{
return false;
}
}
}
return true;
}
Die IEqualityComparer
von Eingabeparameter verwendet wird, hier Eingabe StructruralEqualityComparer
aber int
nicht IStructruralEquatable
nicht implementiert, so dass es Standardvergleich für int
verwendet, welchen Wert Gleichheit ist.
Aber unnötig zu Eingang StructruralEqualityComparer
weil int
nicht strukturell bedingt ist, sollten Sie nur verwenden:
(arr1 as IStructuralEquatable).Equals(arr2, EqualityComparer<int>.Default);
Es funktioniert immer noch.Sie sollten StructruralEqualityComparer
verwenden, wenn das Element in Array structrural
So ist die Implementierung für beide zusammenzufassen, ist eine Art von der gleichen, beide iterieren zwei Array basiert auf Wertgleichheit von int
zum Vergleich.
Ich würde die LINQ-Version bevorzugen, da es besser lesbar ist.
IStructuralEquatable bietet eine Funktion zur Überprüfung der Gleichheit und Vergleich zweier Arrays. –
@leppie Ich war wiering, warum Sie die .net4-Tag entfernt :-) IStructuralEquatable existiert nur in 4. und das ist, warum ich es dort :-) –
@RoyiNamir: Nachdem ich es entfernt habe ich mich gefragt, das gleiche, dann habe ich faul und vergaß es; p – leppie