La implementación de SequenceEqual
es un poco similar ::
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;
Este defecto SequenceEqual
utilice el método por defecto para EqualityComparer<int>.Default
int
que es la igualdad de valor.
Array
implemento IStructuralEquatable
con Equal
método:
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;
}
El IEqualityComparer
del parámetro de entrada se utiliza, aquí usted introduce StructruralEqualityComparer
pero int
no implementa IStructruralEquatable
, por lo que utiliza comparador predeterminado para int
que es la igualdad de valor.
embargo, no hace falta entrada StructruralEqualityComparer
porque int
no es estructural, sólo debe usar:
(arr1 as IStructuralEquatable).Equals(arr2, EqualityComparer<int>.Default);
Todavía funciona.Debe utilizar StructruralEqualityComparer
si el artículo en el array es structrural
Para resumir, la implementación de ambos es el mismo tipo de, tanto iterar matriz de dos basado en el valor de la igualdad int
para hacer la comparación.
Preferiría la verson LINQ ya que es más legible.
IStructuralEquatable proporciona la función para comprobar la igualdad y la comparación de dos matrices. –
@leppie Me preguntaba por qué eliminaste la etiqueta .net4 :-) IStructuralEquatable existe solo en 4. y es por eso que lo puse allí :-) –
@RoyiNamir: Después de eliminarlo me preguntaba lo mismo, luego obtuve perezoso y se olvidó de él; p – leppie