2008-10-07 5 views
1

Lorsque 'val' ci-dessous n'est pas un bool je reçois une exception, je crois que je peux utiliser TryParse mais je ne suis pas sûr de la meilleure façon de l'utiliser avec mon code ci-dessous. Quelqu'un peut-il aider?Application de TryParse en C#

checkBox.Checked = Convert.ToBoolean(val); 

Merci

Répondre

18

Le code est le suivant pour déterminer si la chaîne val est une valeur booléenne valide et l'utiliser pour définir la propriété Checked le cas échéant. Vous devez décider quelle action vous prendrez si elle ne représente pas une valeur valide.

bool result; 
if (bool.TryParse(val, out result)) 
{ 
    // val does represent a Boolean 
    checkBox.Checked = result; 
} 
else 
{ 
    // val does not represent a Boolean 
} 
5

En supposant que si ce ne est pas un booléen valide, vous ne voulez pas vérifié:

bool result = false; 
bool.TryParse(val, out result); 
checkBox.Checked = result; 
+0

et si TryParse() a échoué? –

+2

Joel - si TryParse a échoué checkBox.Checked serait par défaut à false. –

1
bool z = false; 
if(Boolean.TryParse(val, out z)) 
{ 
    checkBox.Checked = z; 
} 

Juste une note: Parse et convertir sont différentes opérations et peut conduire à des résultats différents .

0

bool isBool = false;

bool.TryParse (val, ref isBool);

if(isBool)  
{ 
    ///ok; 

} 
else 
{ 
    // fail; 
} 
0

Cela dépend; si vous voulez checkBox.Checked soit égale à true si val - si elle est une chaîne - true parse puis utilisez les éléments suivants: -

bool output; 
checkBox.Checked = bool.TryParse(val, out output) && output; 

Si bool est pas une chaîne, vous devez décider comment traiter avec elle en fonction de son type, par exemple: -

checkBox.Checked = val != 0; 

etc.

0

bonnes réponses ici déjà.

Je vais cependant ajouter, faites attention avec TryParse, car contrairement à ce que son nom l'indique, il peut infacter encore jeter une ArgumentException!

C'est l'un de mes ennuis pour animaux de compagnie avec .NET! :)

-1

vient de publier ce même extrait pour une autre question, mais voici le code que je l'utilise tous les projets pour faire un bien meilleur travail de manutention booléens dans toute leur assortiment versions:

bool shouldCheck; 
TryParseBool(val, out shouldCheck); 
checkBox.Checked = shouldCheck; 

/// <summary> 
/// Legal values: Case insensitive strings TRUE/FALSE, T/F, YES/NO, Y/N, numbers (0 => false, non-zero => true) 
/// Similar to "bool.TryParse(string text, out bool)" except that it handles values other than 'true'/'false' 
/// </summary> 
public static bool TryParseBool(object inVal, out bool retVal) 
{ 
    // There are a couple of built-in ways to convert values to boolean, but unfortunately they skip things like YES/NO, 1/0, T/F 
    //bool.TryParse(string, out bool retVal) (.NET 4.0 Only); Convert.ToBoolean(object) (requires try/catch) 
    inVal = (inVal ?? "").ToString().Trim().ToUpper(); 
    switch ((string)inVal) 
    { 
     case "TRUE": 
     case "T": 
     case "YES": 
     case "Y": 
      retVal = true; 
      return true; 
     case "FALSE": 
     case "F": 
     case "NO": 
     case "N": 
      retVal = false; 
      return true; 
     default: 
      // If value can be parsed as a number, 0==false, non-zero==true (old C/C++ usage) 
      double number; 
      if (double.TryParse((string)inVal, out number)) 
      { 
       retVal = (number != 0); 
       return true; 
      } 
      // If not a valid value for conversion, return false (not parsed) 
      retVal = false; 
      return false; 
    } 
} 
+0

1) Ceci ne répond pas à la question posée ici. 2) Si vous vous trouvez poster la même réponse à beaucoup de questions différentes, vous faites quelque chose de mal.Soit les questions sont vraiment différentes et la réponse ne s'applique pas à chacune d'entre elles (ce qui est le cas ici), ou les questions sont des doublons et devraient avoir toutes sauf une fermée comme une copie du meilleur. – Servy

+0

Je pense que c'est une réponse valide à la question. Ils ont demandé pourquoi TryParse ne fonctionnait pas, j'ai donné une routine qui ferait ce qu'ils voulaient. Peut-être que j'aurais dû ajouter l'utilisation: bool shouldCheck; TryParseBool (val, out shouldCheck); checkBox.Checked = shouldCheck; –

Questions connexes