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

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

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


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))> _...


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

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

вот простой способ сделать это.

rv.Complete = If(reader("Complete") = "Yes", True, False)

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