8
votes

C # Generics, comparer 2 chaînes échoue sauf indication contraire explicite

Je pensais que je suis tout vu mais ceci ... :)

Je travaillais sur un graphique générique de type chaîne de type, P>

Nodes.First().Value
"A"
Nodes.First().Value == "A"
false
Nodes.First().Value.ToString() == "A"
true


2 commentaires

Quel est le type statique de la propriété ?


Êtes-vous sûr que la valeur est définie comme: valeur T publique {obtenir; ensemble; }


3 Réponses :


3
votes

== est une méthode statique et donc pas virtuelle. La sélection de laquelle == à utiliser est effectuée au moment de la compilation, pas d'exécution. Selon le type de compilation de l'objet, il choisit probablement la mise en œuvre de == pour des objets comparés par référence.

Si vous utilisez la méthode Virtual Equals . Ceci fonctionnera à votre disposition.


0 commentaires

5
votes

Si la valeur de vos nœuds est objet , l'opérateur == dans xxx

fera une comparaison par référence au lieu de comparer des chaînes.


0 commentaires

8
votes

Si les types ne sont pas complètement connus à l'avant (c.-à-d. code> code> est seulement connu sous le nom de t code>, et ne sont pas strictement em> connu pour être connu une chaîne), utilisez des choses comme: xxx pré>

bien sûr, vous pourriez lancer, mais dans ce cas, vous auriez besoin d'une double distribution ( (objet) (objet) code>) qui est laid. p>

Si vous savez que les deux objets sont le même type (c'est-à-dire deux valeurs t code>), vous pouvez utiliser: p>

EqualityComparer<T>.Default.Equals(x,y)


0 commentaires