Can.NET преобразовать " Yes " & " No " в boolean без If?
вы могли бы подумать, что будет способ использовать DirectCast, TryCast, CType и т. д., Но все они, похоже, задыхаются от него, например:
CType("Yes", Boolean)
вы получаете:
8 ответов
Если вы думаете об этом, "да" не может быть преобразован в bool, потому что это строка языка и контекста.
"Да" не является синонимом true (особенно когда ваша жена говорит это...!). Для таких вещей вам нужно преобразовать его самостоятельно; " да "означает" истина"," мммм yeeessss "означает" наполовину истина, наполовину ложь, может быть " и т. д.
используя этот способ, вы можете определить преобразования из любой строки, которую вы хотите, в логическое значение, которое вам нужно. 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
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
немного не по теме, но мне нужно было один раз для одного из моих классов отображать "Да/нет "вместо" True / False " в сетке свойств, поэтому я реализовал YesNoBooleanConverter
полученные от BooleanConverter
и украшать мою собственность с <TypeConverter(GetType(YesNoBooleanConverter))> _
...
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