2010-07-05 13 views
1

Si je déclarais une bool isTrue = false; // init it to falseBool Variable et la valeur de comparaison de chaînes en C#

et je peux obtenir la valeur d'un string strVal = T; // I assumed it is the TRUE value

Je l'ai entendu est pas un bon style de code pour comparer chaîne en C# comme

if (isTrue.tostring() == strVal) {}.

Quelque temps, je convertis la variable string en enum puis je peux la comparer plus pratique.

Y at-il une bonne méthode pour le faire?

+1

encore une faute de frappe? pas besoin de faire "strVal.tostring()" – Arseny

+0

@Arseny, corrigé. Je vous remercie. –

Répondre

6

Oui, vous devez d'abord analyser la chaîne dans un booléen.

Essayez ceci:

bool someBool = false; 

string boolVal = "true"; 
bool stringBool; 
bool.TryParse(boolVal, out stringBool); 

if (someBool == boolVal) 
{ 

} 

Alternativement à manipuler 'T' et 'F' essayer ces méthodes:

public bool ParseString(string maybeBool) 
{ 
    return ParseString(maybeBool, false); 
} 

public bool ParseString(string maybeBool, bool def) 
{ 
    bool stringBool; 
    if (bool.TryParse(maybeBool, out stringBool)) 
     return stringBool; 

    if (string.Equals(maybeBool, "T", StringComparison.OrdinalIgnoreCase)) 
     return true; 

    if (string.Equals(maybeBool, "F", StringComparison.OrdinalIgnoreCase)) 
     return false; 

    return def; 
} 
+0

@all. Je vous remercie. –

+0

@Graphain. J'ai débogué et j'ai trouvé que ça ne fonctionnait pas quand 'boolVal =" T "' pas '" true "'; Ensuite, je peux obtenir 'stringBool = false' après' TryParse() 'Comment puis-je couvrir le problème avec votre méthode? Merci. –

+0

Non TryParse ne gère pas "T", il retournera faux (c'est-à-dire omis d'analyser) dans ce cas.Vérifiez sa valeur de retour et si TryParse renvoie false faites une analyse personnalisée pour gérer "T", "F" etc ... Vous devriez peut-être lancer une exception si boolVal ne correspond toujours pas à quoi que ce soit. –

1

Il n'est pas nécessaire de convertir les valeurs booléennes en chaînes pour comparer les deux. Vous pouvez simplement comparer les deux valeurs booléennes directement:

if (isTrue == boolVal) {} 

Mise à jour: (question suivante mise à jour)

Vous pouvez analyser une chaîne en un booléen et utiliser le booléen résultant dans votre comparaison (comme ci-dessus) , en utilisant soit bool.Parse soit .

+0

Désolé pour mon post original ci-dessus. En pratique, le 'boolVal' est un' strVal' - 'T'. Je prends comme valeur 'bool'' TRUE'. –

3

Essayez plutôt bool.Parse() méthode.

+2

ou bool.TryParse est encore mieux si vous n'êtes pas sûr que la chaîne d'entrée est une valeur de bool valide. – munissor

1
bool.Parse(boolVal) == isTrue 
1

vous pouvez comparer le type booléen à la place.

bool temp = bool.Parse(strVal); 

if(isTrue == temp) 
0

Si vous voulez vraiment faire des comparaisons de chaînes:

if (string.Equals(isTrue.ToString(), strValue)) { } 
+1

c'est sensible à la casse ne fonctionnera pas si srtValue = "true" ou "true" – Arseny

+1

ajouter .ToLower() des deux côtés alors! ;) –

1

Encore une autre version que j'utilise beaucoup est tout simplement Convert.ToBoolean(stringFromBoolVal)

ce qui a trait

1

Que diriez-vous d'essayer cette façon simple de déterminer la valeur de la variable bool isTrue:

isTrue = strVal == "T"; 

isTrue retournera vrai si le strVal est égal à "T". Et retournez faux si non.