cara mengubah string menjadi bool

90

Saya memiliki stringyang dapat berupa "0" atau "1", dan dijamin tidak akan menjadi yang lain.

Jadi pertanyaannya adalah: apa cara terbaik, termudah dan paling elegan untuk mengubahnya menjadi a bool?

Sachin Kainth
sumber
3
Jika ada nilai tak terduga yang dapat dimasukkan, pertimbangkan untuk menggunakan TryParse ( stackoverflow.com/questions/18329001/… )
Michael Freidgeim

Jawaban:

172

Cukup sederhana:

bool b = str == "1";
Kendall Frey
sumber
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!");
        }
    }
}
Mohammad Sepahvand
sumber
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!
cinta hidup
sumber
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");
GETah
sumber
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));
    }
mcfea.dll
sumber
5

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

Convert.ToBoolean(Convert.ToInt32(myString));
yogihosting
sumber
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;
    }
}
Mark Meuer
sumber
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));
}
Di Luar Kotak Pengembang
sumber
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");
        }
Hoang Tran
sumber
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
Arvo Bowen
sumber
-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'

pengguna2215619
sumber