.NET может преобразовать “Да” и "Нет" к булевской переменной без Если?

Вы думали бы, что будет способ использовать DirectCast, TryCast, CType и т.д., но все они, кажется, дросселируют на нем, например:

CType("Yes", Boolean)

Вы добираетесь:

Система. InvalidCastException - Преобразование из строки "Да" для ввода 'булевской переменной' не допустимо.

14
задан hawbsl 20 May 2010 в 10:05
поделиться

6 ответов

Если подумать, "yes" нельзя преобразовать в bool, потому что это строка, специфичная для языка и контекста.

"Да" не является синонимом истины (особенно когда это говорит ваша жена...!). Для таких вещей вам нужно преобразовать его самостоятельно; "yes" означает "true", "mmmm yeeessss" означает "half true, half false, maybe", и т.д.

72
ответ дан 1 December 2019 в 05:47
поделиться

Используя этот способ, вы можете определить преобразования из любой строки, которая вам нравится, в нужное вам булево значение. 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
24
ответ дан 1 December 2019 в 05:47
поделиться

Немного не по теме, но мне понадобился один раз для одного из моих классы для отображения «Да / Нет» вместо «Истина / Ложь» в сетке свойств, поэтому я реализовал YesNoBooleanConverter , производный от BooleanConverter и украсив свое свойство < TypeConverter (GetType (YesNoBooleanConverter))> _ ...

1
ответ дан 1 December 2019 в 05:47
поделиться

Вы не можете. Но вы должны использовать его как

bool result = yourstring.ToLower() == "yes";
2
ответ дан 1 December 2019 в 05:47
поделиться
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
3
ответ дан 1 December 2019 в 05:47
поделиться

Нет, но можно сделать так:

bool yes = "Yes". equals(yourString);

8
ответ дан 1 December 2019 в 05:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: