Может ли .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