Classe personnalisée utilisé comme clé du Dictionnaire, mais touche pas trouvé
J'ai une classe, montrons ci-dessous, qui est utilisé comme une clé dans une Dictionary<ValuesAandB, string>
Je vais avoir des problèmes en essayant de trouver une clé au sein de ce dictionnaire, il n'a jamais trouve de tout. Comme vous pouvez le voir, j'ai annulé Equals
et GetHashCode
.
À chercher la clé je suis en utilisant
ValuesAandB key = new ValuesAandB(A,B);
if (DictionaryName.ContainsKey(key)) {
...
}
Est-il autre chose que je suis absent? Quelqu'un peut-il point de ce que je fais de mal?
private class ValuesAandB {
public string valueA;
public string valueB;
//Constructor
public ValuesAandB (string valueAIn, string valueBIn) {
valueA = valueAIn;
valueB = ValueBIn;
}
public class EqualityComparer : IEqualityComparer<ValuesAandB> {
public bool Equals(ValuesAandB x, ValuesAandB y) {
return ((x.valueA.Equals(y.valueA)) && (x.valueB.Equals(y.valueB)));
}
public int GetHashCode(ValuesAandB x) {
return x.valueA.GetHashCode() ^ x.valueB.GetHashCode();
}
}
}
Et avant que quiconque demande, oui les valeurs sont dans le Dictionnaire!
OriginalL'auteur Ian Devlin | 2009-10-27
Vous devez vous connecter pour publier un commentaire.
Comment allez-vous construire le dictionnaire? Êtes-vous en passant personnalisé de votre comparateur d'égalité dans son constructeur?
OriginalL'auteur
Vous n'avez pas remplacé d'égal à Égal et GetHashCode. Vous avez mis en place un deuxième classe qui peut servir comme un EqualityComparer. Si vous n'avez pas de construire le Dictionnaire avec le EqualityComparer, il ne sera pas utilisé.
La solution la plus simple serait de remplacer GetHashCode et est Égal directement, plutôt que de mettre en place un comparateur (les comparateurs sont généralement seulement intéressant lorsque vous avez besoin de fournir plusieurs de comparaison différents types (sensible à la casse et casse par exemple) ou lorsque vous avez besoin pour être en mesure d'effectuer des comparaisons sur une classe qui vous n'avez pas de contrôle.
OriginalL'auteur StarPacker
On dirait que vous êtes la comparaison de deux chaînes de caractères. Iirc, lors de l'utilisation .Equals(), la comparaison de la référence de la ou des chaînes, pas le contenu réel. Pour mettre en œuvre un EqualityComparer qui fonctionne avec des chaînes, vous pouvez utiliser la Chaîne de caractères.Méthode Compare ().
Je pourrais être un peu large avec le code, qui devrait vous permettre de fermer...
facepalm je ne suis pas sûr de ce que je pensais.
OriginalL'auteur cloggins
J'ai eu ce problème, s'avère le dictionnaire a été de comparer referances pour ma clé, pas de les valeurs dans l'objet.
J'ai été en utilisant un custom classe Point que les clés. J'ai remplacé les méthodes ToString() et la GetHashCode() les méthodes et alto, clé de recherche a bien fonctionné.
OriginalL'auteur Muad'Dib