90 votes

comment convertir une chaîne en bool

J'ai un string qui peut être soit "0" soit "1", et il est garanti que ce ne sera rien d'autre.

La question est donc : quelle est la manière la meilleure, la plus simple et la plus élégante de convertir cela en bool ?

180voto

Kendall Frey Points 19670

Assez simple en effet :

 bool b = str == "1";

84voto

Mohammad Sepahvand Points 5377

Ignorant les besoins spécifiques de cette question, et bien que ce ne soit jamais une bonne idée de convertir une chaîne en booléen, une façon serait d'utiliser la méthode ToBoolean() sur la classe Convert :

bool val = Convert.ToBoolean("true");

ou une méthode d'extension pour faire n'importe quel mappage étrange que vous faites :

 public static class StringExtensions
{
    public static bool ToBoolean(this string value)
    {
        switch (value.ToLower())
        {
            case  "true":
                return true;
            case "t":
                return true;
            case "1":
                return true;
            case "0":
                return false;
            case "false":
                return false;
            case "f":
                return false;
            default:
                throw new InvalidCastException("You can't cast that value to a bool!");
        }
    }
}

51voto

40-Love Points 1333

Je sais que cela ne répond pas à votre question, mais juste pour aider les autres. Si vous essayez de convertir des chaînes "true" ou "false" en booléen :

Essayez Boolean.Parse

 bool val = Boolean.Parse("true"); ==> true
bool val = Boolean.Parse("True"); ==> true
bool val = Boolean.Parse("TRUE"); ==> true
bool val = Boolean.Parse("False"); ==> false
bool val = Boolean.Parse("1"); ==> Exception!
bool val = Boolean.Parse("diffstring"); ==> Exception!

20voto

GETah Points 10887
bool b = str.Equals("1")? true : false;

Ou encore mieux, comme suggéré dans un commentaire ci-dessous :

 bool b = str.Equals("1");

8voto

mcfea Points 87

J'ai fait quelque chose d'un peu plus extensible, en m'appuyant sur le concept de Mohammad Sepahvand :

     public static bool ToBoolean(this string s)
    {
        string[] trueStrings = { "1", "y" , "yes" , "true" };
        string[] falseStrings = { "0", "n", "no", "false" };


        if (trueStrings.Contains(s, StringComparer.OrdinalIgnoreCase))
            return true;
        if (falseStrings.Contains(s, StringComparer.OrdinalIgnoreCase))
            return false;

        throw new InvalidCastException("only the following are supported for converting strings to boolean: " 
            + string.Join(",", trueStrings)
            + " and "
            + string.Join(",", falseStrings));
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X