Вы думали бы, что будет способ использовать DirectCast, TryCast, CType и т.д., но все они, кажется, дросселируют на нем, например:
CType("Yes", Boolean)
Вы добираетесь:
Система. InvalidCastException - Преобразование из строки "Да" для ввода 'булевской переменной' не допустимо.
Если подумать, "yes" нельзя преобразовать в bool, потому что это строка, специфичная для языка и контекста.
"Да" не является синонимом истины (особенно когда это говорит ваша жена...!). Для таких вещей вам нужно преобразовать его самостоятельно; "yes" означает "true", "mmmm yeeessss" означает "half true, half false, maybe", и т.д.
Используя этот способ, вы можете определить преобразования из любой строки, которая вам нравится, в нужное вам булево значение. 1 - истина, 0 - ложь, очевидно.
Преимущества: Легко модифицируется. Вы можете добавлять новые псевдонимы или удалять их очень легко.
Минусы: Вероятно, это займет больше времени, чем простой if. (Но если у вас несколько псевдонимов, это будет сложно)
enum BooleanAliases { Да = 1, За = 1, Cool = 1, Naw = 0, No = 0 } static bool FromString(string str) { return Convert.ToBoolean(Enum.Parse(typeof(BooleanAliases), str)); } // FromString("Yes") = true // FromString("No") = false // FromString("Cool") = true
Немного не по теме, но мне понадобился один раз для одного из моих классы для отображения «Да / Нет» вместо «Истина / Ложь» в сетке свойств, поэтому я реализовал YesNoBooleanConverter
, производный от BooleanConverter
и украсив свое свойство < TypeConverter (GetType (YesNoBooleanConverter))> _
...
Вы не можете. Но вы должны использовать его как
bool result = yourstring.ToLower() == "yes";
private static bool GetBool(string condition)
{
return condition.ToLower() == "yes";
}
GetBool("Yes"); // true
GetBool("No"); // false
Или другой подход с использованием методов расширения
public static bool ToBoolean(this string str)
{
return str.ToLower() == "yes";
}
bool answer = "Yes".ToBoolean(); // true
bool answer = "AnythingOtherThanYes".ToBoolean(); // false
Нет, но можно сделать так:
bool yes = "Yes". equals(yourString);