Может ли .NET конвертировать "Да" и "Нет" в boolean без If?

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

CType("Yes", Boolean)

Вы получаете:

System.InvalidCastException - Преобразование из строки "Да" для ввода 'Boolean' недействителен.

Ответы

Ответ 1

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

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

Ответ 2

Используя этот способ, вы можете определить конверсии из любой строки, которая вам нравится, к требуемому логическому значению. 1 верно, 0 ложно, очевидно.
Преимущества: легко модифицируется. Вы можете добавить новые псевдонимы или удалить их очень легко.
Минусы: Вероятно, это займет больше времени, чем просто. (Но если у вас несколько алисов, оно будет волосатым)

enum BooleanAliases {
      Yes = 1,
      Aye = 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

Ответ 3

Нет, но вы могли бы сделать так:

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

bool result = yourstring.ToLower() == "yes";

Ответ 7

Public Function TrueFalseToYesNo(thisValue As Boolean) As String
    Try
        If thisValue Then
            Return "Yes"
        Else
            Return "No"
        End If
    Catch ex As Exception
        Return thisValue.ToString
    End Try
End Function