У меня есть значение, string
которое может быть либо «0», либо «1», и гарантировано, что это не будет больше ничего.
Возникает вопрос: какой лучший, самый простой и элегантный способ преобразовать это в a bool
?
c#
type-conversion
Сачин Каинт
источник
источник
Ответы:
Действительно, довольно просто:
bool b = str == "1";
источник
Игнорируя конкретные потребности этого вопроса, и хотя никогда не бывает хорошей идеей преобразовать строку в bool, одним из способов было бы использовать метод ToBoolean () в классе Convert:
bool val = Convert.ToBoolean("true");
или метод расширения, чтобы сделать любое странное отображение, которое вы делаете:
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!"); } } }
источник
FormatException
как Convert.ToBoolean .Я знаю, что это не ответ на ваш вопрос, а просто помощь другим людям. Если вы пытаетесь преобразовать строки «истина» или «ложь» в логические значения:
Попробуйте 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!
источник
bool b = str.Equals("1")? true : false;
Или даже лучше, как предлагается в комментарии ниже:
bool b = str.Equals("1");
источник
x ? true : false
юмористическим.bool b = str.Equals("1")
Работает отлично и на первый взгляд более интуитивно понятно.str
имеет значение Null, и вы хотите, чтобы Null разрешался как False.Я сделал что-то более расширяемое, взяв за основу концепцию Мохаммада Сепахванда:
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)); }
источник
Я использовал приведенный ниже код для преобразования строки в логическое значение.
источник
Вот моя попытка сделать наиболее простое преобразование строки в bool, которое все еще полезно, в основном отключая только первый символ.
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; } }
источник
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)); }
источник
Я использую это:
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"); }
источник
Мне нравятся методы расширения, и я использую именно этот ...
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; } }
Затем, чтобы использовать это, просто сделайте что-нибудь вроде ...
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
источник
Если вы хотите проверить, является ли строка допустимым логическим значением без каких-либо исключений, вы можете попробовать следующее:
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"); }
вывод,
is Boolean
а вывод для stringToBool2: 'is not Boolean'источник