wie man einen String in einen Bool konvertiert


Antworten:


168

Ganz einfach:

bool b = str == "1";

Vielen Dank! Ich kann nicht glauben, wie sehr ich darüber nachgedacht habe
grizzasd

77

Wenn Sie die spezifischen Anforderungen dieser Frage ignorieren und es nie eine gute Idee ist, einen String in einen Bool umzuwandeln , besteht eine Möglichkeit darin, die ToBoolean () -Methode für die Convert-Klasse zu verwenden:

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

oder eine Erweiterungsmethode, um das seltsame Mapping durchzuführen, das Sie ausführen:

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!");
        }
    }
}

1
Verhalten von Convert.ToBoolean gezeigt in stackoverflow.com/questions/7031964/…
Michael Freidgeim

1
Feel Boolean.TryParse ist vorzuziehen, wenn viele Werte konvertiert werden müssen, da es nicht FormatExceptionwie Convert.ToBoolean ausgelöst wird .
user3613932

44

Ich weiß, dass dies Ihre Frage nicht beantwortet, sondern nur anderen Menschen hilft. Wenn Sie versuchen, "wahre" oder "falsche" Zeichenfolgen in Boolesche Werte umzuwandeln:

Versuchen Sie 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!

Benötigte es für ein Powershell-Skript, das einige XML-Daten liest, und das ist perfekt!
Alternatex

20
bool b = str.Equals("1")? true : false;

Oder noch besser, wie in einem Kommentar unten vorgeschlagen:

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

39
Ich halte alles von der Form für x ? true : falsehumorvoll.
Kendall Frey

5
bool b = str.Equals("1") Funktioniert gut und auf den ersten Blick intuitiver.
Erik Philips

@ErikPhilips Nicht so intuitiv, wenn Ihr String strNull ist und Sie möchten, dass Null als False aufgelöst wird.
MikeTeeVee

7

Ich habe etwas etwas erweiterbarer gemacht, indem ich Mohammad Sepahvands Konzept huckepack genommen habe:

    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));
    }

5

Ich habe den folgenden Code verwendet, um einen String in einen Booleschen Wert zu konvertieren.

Convert.ToBoolean(Convert.ToInt32(myString));

Es ist nicht erforderlich, Convert.ToInt32 aufzurufen, wenn die einzigen beiden Möglichkeiten "1" und "0" sind. Wenn Sie andere Fälle berücksichtigen möchten, ist var isTrue = Convert.ToBoolean ("true") == true && Convert.ToBoolean ("1"); // Sind beide wahr.
TamusJRoyce

Schau dir Mohammad Sepahv an und antworte Michael Freidgeim Kommentar!
TamusJRoyce

3

Hier ist mein Versuch, die verzeihendste Konvertierung von Zeichenfolgen in Bools vorzunehmen, die immer noch nützlich ist, und im Grunde nur das erste Zeichen abzutasten.

public static class StringHelpers
{
    /// <summary>
    /// Convert string to boolean, in a forgiving way.
    /// </summary>
    /// <param name="stringVal">String that should either be "True", "False", "Yes", "No", "T", "F", "Y", "N", "1", "0"</param>
    /// <returns>If the trimmed string is any of the legal values that can be construed as "true", it returns true; False otherwise;</returns>
    public static bool ToBoolFuzzy(this string stringVal)
    {
        string normalizedString = (stringVal?.Trim() ?? "false").ToLowerInvariant();
        bool result = (normalizedString.StartsWith("y") 
            || normalizedString.StartsWith("t")
            || normalizedString.StartsWith("1"));
        return result;
    }
}

3
    private static readonly ICollection<string> PositiveList = new Collection<string> { "Y", "Yes", "T", "True", "1", "OK" };

public static bool ToBoolean(this string input)
{
                return input != null && PositiveList.Any => λ.Equals(input, StringComparison.OrdinalIgnoreCase));
}

1

Ich benutze das:

public static bool ToBoolean(this string input)
        {
            //Account for a string that does not need to be processed
            if (string.IsNullOrEmpty(input))
                return false;

            return (input.Trim().ToLower() == "true") || (input.Trim() == "1");
        }

0

Ich liebe Erweiterungsmethoden und diese verwende ich ...

static class StringHelpers
{
    public static bool ToBoolean(this String input, out bool output)
    {
        //Set the default return value
        output = false;

        //Account for a string that does not need to be processed
        if (input == null || input.Length < 1)
            return false;

        if ((input.Trim().ToLower() == "true") || (input.Trim() == "1"))
            output = true;
        else if ((input.Trim().ToLower() == "false") || (input.Trim() == "0"))
            output = false;
        else
            return false;

        //Return success
        return true;
    }
}

Um es dann zu benutzen, mache einfach so etwas wie ...

bool b;
bool myValue;
data = "1";
if (!data.ToBoolean(out b))
  throw new InvalidCastException("Could not cast to bool value from data '" + data + "'.");
else
  myValue = b;  //myValue is True

-1

Wenn Sie testen möchten, ob eine Zeichenfolge ohne ausgelöste Ausnahmen ein gültiger Boolescher Wert ist, können Sie Folgendes versuchen:

    string stringToBool1 = "true";
    string stringToBool2 = "1";
    bool value1;
    if(bool.TryParse(stringToBool1, out value1))
    {
        MessageBox.Show(stringToBool1 + " is Boolean");
    }
    else
    {
        MessageBox.Show(stringToBool1 + " is not Boolean");
    }

Ausgabe is Boolean und die Ausgabe für stringToBool2 lautet: 'ist nicht boolesch'

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.