2011-02-01 1 views
0

J'ai deux chaînes que je veux comparer.String Compare Issue

A est un contrôle utilisateur Silverlight avec la propriété Header.

B est une plaine System.String.

Quand je compare comme ceci:

if(A.Header == B) 

Je suis en train qu'ils ne sont pas les mêmes.

Si j'inspecte les valeurs dans VS2010 avec surveillance rapide, les valeurs sont les mêmes. Si je cours GetType sur les deux objets, je trouve qu'ils sont tous les deux System.String.

Je sais que je peux juste les comparer avec String.Compare.

Je pensais que faire == sur les chaînes comparerait toujours les valeurs. Y at-il quelque chose d'un peu bizarre avec ce contrôle Silverlight que j'utilise? Quelqu'un pourrait-il expliquer ce que je manque ici?

Merci.

+0

Est-ce que 'String.compare' retour'on'? – detunized

+0

Est-ce que 'string.Compare' renvoie que les chaînes sont égales? – ChrisF

+0

non je viens de vérifier deux fois –

Répondre

0

Ont-ils la même longueur? Peut-être qu'il y a un espace de fuite ou de tête.

0

Essayez ceci:

char[] arrayA = A.Header.ToCharArray(); 
char[] arrayB = B.ToCharArray(); 

et les inspecter avec VS. Il devrait apparaître clairement où ils diffèrent.

+0

Ceci est ** pas correct **.L'opérateur '==' est surchargé pour les types 'String' pour tester l'égalité des valeurs plutôt que l'égalité de référence. Il a généralement une signification identique à l'opérateur '=='. Voir [cette question] (http://stackoverflow.com/questions/3678792/c-are-string-equals-and-operator-really-same) pour un aperçu des nuances. –

+0

Ce n'est pas vrai. L'opérateur == est implémenté en utilisant la méthode Equals() et compare les deux côtés en utilisant leurs valeurs. Voir http://msdn.microsoft.com/en-us/library/system.string.op_equality.aspx –

+0

Rétrogradation supprimée en réponse à votre modification. Je vais laisser mon commentaire juste pour éclaircir quelqu'un d'autre qui pourrait penser la même chose. –

0

Ils peuvent avoir un espace de fin ou quelque chose qui ressemble à la même chose, mais qui a différents codes de caractères réels. Comme un caractère cyrillique е pourrait ressembler au latin e, mais ils ne sont pas identiques. Essayez d'itérer sur les personnages et voir s'ils sont tous pareils.

0

Peut-être des espaces de début ou de fin, une différence de casse, peut-être qu'il contient des caractères identiques, mais avec un code de caractère différent.

les opérations suivantes:

if (string.Compare(A.Header.Trim(), B.Trim(), StringComparison.OrdinalIgnoreCase) == 0) 
{ 
    .. 
} 
+0

Une méthode plus appropriée pour comparer les chaînes serait avec la méthode static [string.Compare (a, b, compare)] (http://msdn.microsoft.com/en-us/library/e6883c06.aspx). – slugster

+0

Mélanger les langues :-) –