你会认为有一种方法可以使用DirectCast,TryCast,CType等,但所有这些似乎都扼杀了它,例如:
CType("Yes", Boolean)
你得到:
System.InvalidCastException - 从字符串“是”转换为类型 '布尔'无效。
答案 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