.NET可以转换为“是”&如果没有If,则为“否”为布尔值?

时间:2010-05-20 10:05:40

标签: .net casting boolean

你会认为有一种方法可以使用DirectCast,TryCast,CType等,但所有这些似乎都扼杀了它,例如:

CType("Yes", Boolean)

你得到:

  

System.InvalidCastException -   从字符串“是”转换为类型   '布尔'无效。

13 个答案:

答案 0 :(得分:68)

如果您考虑一下,“是”无法转换为bool,因为它是一种语言和上下文特定的字符串。

“是”不是真的同义词(尤其是当你的妻子说出来的时候......)。对于类似的东西,你需要自己转换它; “是”表示“真实”,“mmmm yeeessss”表示“半真,半假,也许”等。

答案 1 :(得分:22)

使用这种方式,您可以将您喜欢的任何字符串的转换定义为您需要的布尔值。 1是真的,0显然是假的 好处:易于修改。您可以添加新别名或轻松删除它们 缺点:可能需要比简单的if更长的时间。 (但如果你有多个alises,它会变得毛茸茸的)

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

答案 2 :(得分:6)

不,但你可以这样做:

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

你做不到。但你应该用它作为

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

答案 5 :(得分:1)

稍微偏离主题,但我需要在其中一个类中在属性网格中显示“是/否”而不是“真/假”,因此我实现了YesNoBooleanConverter派生自{{3用<TypeConverter(GetType(YesNoBooleanConverter))> _ ...

装饰我的财产

答案 6 :(得分:1)

C#6+版本:

public static bool StringToBool(string value) => 
    value.Equals("yes",           StringComparison.CurrentCultureIgnoreCase) ||
    value.Equals(bool.TrueString, StringComparison.CurrentCultureIgnoreCase) || 
    value.Equals("1");`

答案 7 :(得分:0)

    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;
    }

答案 8 :(得分:0)

我喜欢@thelost发布的答案,但是我正在从ADO.Net DataTable中读取值,并且DataTable中字符串的大小写可能会有所不同。

我需要以布尔值形式获取的值位于名为childAccounts的列的名为Trades的数据表中。

我实现了这样的解决方案:

bool tradeFlag = childAccounts["Trade"].ToString().Equals("yes", StringComparison.InvariantCultureIgnoreCase);

答案 9 :(得分:0)

public static bool IsBoolean(string strValue)
{
    return !string.IsNullOrEmpty(strValue) && ("1/YES/TRUE".IndexOf(strValue, StringComparison.CurrentCultureIgnoreCase) >= 0);
}

答案 10 :(得分:0)

我喜欢 switch,因为它简单且可根据需要轻松扩展。默认模式可以毫不费力地捕获空字符串和空值。我也喜欢扩展方法,所以我最终得到了这个:

public static class StringExtensions
{
    public static bool ToBool(this string str)
    {
        return str?.ToLower() switch
        {
            "true" => true,
            "yes" => true,
            "y" => true,
            "t" => true,
            "1" => true,
            _ => false
        };
    }   
}

用法

"Yes".ToBool();  // true
"no".ToBool();   // false
"".ToBool();     // false

string s = null;
s.ToBool();      // false

答案 11 :(得分:-1)

这是完成此任务的简单方法。

ARG: -E^^sleep^^1
CMD: cmake
ARGS:
--   -E
--   sleep
--   1
RESULT: 0
OUTPUT: 

答案 12 :(得分:-2)

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