Cette question sera probablement très simple. J'essaie simplement de supprimer les octets [] en double d'une collection.Suppression des octets [] s en double d'une collection
Puisque le comportement par défaut est de comparer des références, j'ai pensé que créer un IEqualityComparer fonctionnerait, mais ce n'est pas le cas.
J'ai essayé d'utiliser un HashSet et un Distinct() de LINQ.
Exemple de code:
using System;
using System.Collections.Generic;
using System.Linq;
namespace cstest
{
class Program
{
static void Main(string[] args)
{
var l = new List<byte[]>();
l.Add(new byte[] { 5, 6, 7 });
l.Add(new byte[] { 5, 6, 7 });
Console.WriteLine(l.Distinct(new ByteArrayEqualityComparer()).Count());
Console.ReadKey();
}
}
class ByteArrayEqualityComparer : IEqualityComparer<byte[]>
{
public bool Equals(byte[] x, byte[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(byte[] obj)
{
return obj.GetHashCode();
}
}
}
Sortie:
2
Merci, cela fonctionne. Ressemble à Array.GetHashCode() ne dépend pas du contenu du tableau (j'obtiens des résultats différents chaque fois que je lance l'application). – GameZelda
@GameZelda - en effet; les tableaux utilisent simplement l'égalité de référence jusqu'à ce que vous fournissiez votre propre comparateur. –