字符串到布尔的内联转换
本文关键字:转换 布尔 字符串 | 更新日期: 2023-09-27 18:07:13
我目前拥有的:
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
Convert.ToBoolean(Ctx.Request["okPress"]);
如果我错了,请纠正我,但如果字符串不是"true
/True
"或"false
/False
",这不是会抛出FormatException
吗?有没有什么方法可以在一行中处理转换,而不必担心异常?还是我需要使用Boolean.TryParse
?
您可以使用Boolean.TryParse
:
bool okPress;
bool success = Boolean.TryParse(Ctx.Request["okPress"]), out okPress);
值得一提的是,这里有一个"一行",创建以下扩展,特别是在LINQ查询中可能有用:
public static bool TryGetBool(this string item)
{
bool b;
Boolean.TryParse(item, out b);
return b;
}
并写入:
bool okPress = Ctx.Request["okPress"].TryGetBool();
如果你不想使用TryParse
,你可以做一些类似的事情
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
(Ctx.Request["okPress"].ToLower()=="true");
这样,如果字符串不是true/false,它只会为您假设为false,不会引发异常。
当然,这确实假设你很高兴"fish"的值被视为假,而不是例外。
不过,最好不要把它作为一行。你通常没有最大的代码行数,所以两三行简单的代码通常比一行复杂的代码好。。。
为什么不将字符串与true
进行比较?
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
String.Compare(Ctx.Request["okPress"], "true", StringComparison.OrdinalIgnoreCase) == 0
您可以使用Boolean
类的TryParse方法。
尝试转换逻辑的指定字符串表示形式值与其布尔等价值的比较。返回值指示转换成功或失败。
bool result = Boolean.TryParse(Ctx.Request["okPress"]), out okPress);
如果值转换成功,则返回true
;否则为false
。
您的内联转换。
public static bool TryParseAsBoolean(this string expression)
{
bool booleanValue;
bool.TryParse(expression, out booleanValue);
return booleanValue;
}
bool okPress = Ctx.Request["okPress"].TryParseAsBoolean();