2009-09-09 9 views
0

Je suppose que cela devrait être bonComparaison String ensemble à booléen variables

bool prefMatch = false; 

// Is the frequency the same? 
prefMatch = string.Compare(user.Frequency, pref.Action.ToString()) == 0; 

donc si user.Frequency est « 3 » et pref.Action.ToString() est « 3 », alors il doit régler le prefMatch à vrai vrai? Je reçois de faux et je l'ai vérifié les 2 certainement valeurs dans l'onglet montre dans VS 2008 juste pour être sûr qu'ils sont les mêmes

+5

'String.Compare' n'est pas rompu. :) –

+0

J'ai effectivement eu une valeur différente étant comparée que je pensais. Fonctionne bien. – PositiveGuy

Répondre

5

Vous pouvez simplement utiliser ==

prefMath = (user.Frequency == pref.Action.ToString()); 

Bien que string.Compare sera également travail. Je suggère qu'il y a un problème ailleurs.

- Modifier

Aussi, juste pour être complet, il n'y a pas de point assigner une variable à quelque chose, puis l'affecter à nouveau directement après. C'est un peu déroutant de le faire, donc mieux vaut ne pas l'assigner, ou l'assigner tous en un seul endroit. De cette façon, le compilateur peut vous aider si vous avez un cas où il n'est pas assigné comme vous le pensez. Il est, évidemment, acceptable d'attribuer d'abord si vous enveloppez la deuxième affectation dans un try/catch cependant.

2

Dans des situations comme celles-ci, il est parfois tentant de pointer du doigt le code d'un tiers, comme vous l'avez fait ici. Parfois, cela est justifié - mais pas ici. String.Compare est un élément central et extrêmement bien testé du .NET Framework. Cela ne manque pas. Je le garantis.

Ce que je trouve utile dans ces situations est d'isoler la panne. Écrivez un petit cas de test autonome qui tente de démontrer le problème. Écrivez-le avec le moins de dépendances possible. Faites-en une application de console autonome, si possible. Postez-le ici. Si nous pouvons le prendre, le compiler et l'exécuter, et reproduire le problème, nous pouvons vous aider. Cependant, je parierais de l'argent que lors de la création de ce cas de test, vous ferez l'expérience d'un coup de tête - "bien sûr!" - et réaliser quel est le problème.

0

Peut-être que les chaînes contiennent des caractères non imprimables? Pour vérifier, je ferais quelque chose comme:

byte[] b1 = System.Text.Encoding.UTF8.GetBytes(user.Frequency); 
byte[] b2 = System.Text.Encoding.UTF8.GetBytes(pref.Action.ToString()); 

puis comparer le contenu de b1 et b2.

Questions connexes