Saya memiliki string
yang 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
?
c#
type-conversion
Sachin Kainth
sumber
sumber
Jawaban:
Cukup sederhana:
bool b = str == "1";
sumber
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!"); } } }
sumber
FormatException
seperti Convert.ToBoolean .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!
sumber
bool b = str.Equals("1")? true : false;
Atau bahkan lebih baik, seperti yang disarankan dalam komentar di bawah ini:
bool b = str.Equals("1");
sumber
x ? true : false
lucu.bool b = str.Equals("1")
Bekerja dengan baik dan lebih intuitif pada pandangan pertama.str
Null dan Anda ingin Null menyelesaikannya sebagai False.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)); }
sumber
Saya menggunakan kode di bawah ini untuk mengubah string menjadi boolean.
sumber
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; } }
sumber
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)); }
sumber
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"); }
sumber
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
sumber
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'sumber