cara mengubah string menjadi bool


Jawaban:


172

Cukup sederhana:

bool b = str == "1";

Terima kasih! Saya tidak percaya betapa saya sudah terlalu memikirkan ini
grizzasd

79

Mengabaikan kebutuhan spesifik dari pertanyaan ini, dan meskipun tidak pernah merupakan ide yang baik untuk mentransmisikan string ke bool, salah satu caranya adalah menggunakan metode ToBoolean () pada kelas Convert:

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

atau metode ekstensi untuk melakukan pemetaan aneh apa pun yang Anda lakukan:

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
Perilaku Convert.ToBoolean ditampilkan di stackoverflow.com/questions/7031964/…
Michael Freidgeim

1
Feel Boolean.TryParse lebih disukai jika banyak nilai perlu dikonversi karena tidak muncul FormatExceptionseperti Convert.ToBoolean .
pengguna3613932

48

Saya tahu ini tidak menjawab pertanyaan Anda, tetapi hanya untuk membantu orang lain. Jika Anda mencoba mengonversi string "true" atau "false" menjadi boolean:

Coba 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!

Dibutuhkan untuk skrip Powershell yang membaca beberapa data XML dan ini sempurna!
Alternatex

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

Atau bahkan lebih baik, seperti yang disarankan dalam komentar di bawah ini:

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

39
Saya menganggap segala sesuatu dalam bentuk x ? true : falselucu.
Kendall Frey

5
bool b = str.Equals("1") Bekerja dengan baik dan lebih intuitif pada pandangan pertama.
Erik Philips

@ErikPhilips Tidak begitu intuitif saat String Anda strNull dan Anda ingin Null menyelesaikannya sebagai False.
MikeTeeVee

7

Saya membuat sesuatu yang sedikit lebih dapat diperluas, Mengumpat pada konsep 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));
    }

5

Saya menggunakan kode di bawah ini untuk mengubah string menjadi boolean.

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

Tidak perlu memanggil Convert.ToInt32 jika dua kemungkinan hanya "1" dan "0". Jika Anda ingin mempertimbangkan kasus lain, var isTrue = Convert.ToBoolean ("true") == true && Convert.ToBoolean ("1"); // Keduanya benar.
TamusJRoyce

Lihat jawaban Mohammad Sepahvand komentar Michael Freidgeim!
TamusJRoyce

3

Inilah upaya saya di string yang paling memaafkan untuk konversi bool yang masih berguna, pada dasarnya hanya memasukkan karakter pertama.

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

Saya menggunakan ini:

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

Saya suka metode ekstensi dan ini yang saya gunakan ...

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

Kemudian untuk menggunakannya, lakukan sesuatu seperti ...

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

Jika Anda ingin menguji apakah suatu string adalah Boolean yang valid tanpa pengecualian apa pun, Anda dapat mencoba ini:

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

keluaran is Boolean dan keluaran untuk stringToBool2 adalah: 'bukan Boolean'

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.