Может ли .NET преобразовать «Да» и «Нет» в логическое значение без If? - PullRequest
14 голосов
/ 20 мая 2010

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

CType("Yes", Boolean)

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

System.InvalidCastException - Преобразование из строки «Да» в тип «Boolean» недопустимо.

Ответы [ 9 ]

68 голосов
/ 20 мая 2010

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

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

22 голосов
/ 20 мая 2010

Используя этот способ, вы можете определить преобразования из любой понравившейся вам строки в нужное вам логическое значение. 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
6 голосов
/ 20 мая 2010

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

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

3 голосов
/ 20 мая 2010
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
2 голосов
/ 20 мая 2010

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

bool result = yourstring.ToLower() == "yes";
1 голос
/ 20 мая 2010

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

0 голосов
/ 07 марта 2019
    private bool StrToBool(string value)
    {   // could be yes/no, Yes/No, true/false, True/False, 1/0
        bool b = false;
        if (value.Equals("yes", StringComparison.CurrentCultureIgnoreCase) || value.Equals(Boolean.TrueString, StringComparison.CurrentCultureIgnoreCase) || value.Equals("1"))
        {
            b = true;
        }
        else if (value.Equals("no", StringComparison.CurrentCultureIgnoreCase) || value.Equals(Boolean.FalseString, StringComparison.CurrentCultureIgnoreCase) || value.Equals("0"))
        {
            b = false;
        }
        else
        {   // we should't be here 
            b = false;
        }
        return b;
    }
0 голосов
/ 28 июля 2018

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

rv.Complete = If(reader("Complete") = "Yes", True, False)
0 голосов
/ 04 декабря 2015
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...