我现在有什么:
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
Convert.ToBoolean(Ctx.Request["okPress"]);
如果我在这里错了,请纠正我,但如果字符串不是“FormatException
/ true
”或“True
,则不会抛出false
/ False
“?有没有办法在一行中处理转换,而不必担心异常?或者我需要使用Boolean.TryParse
吗?
答案 0 :(得分:5)
您可以使用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();
答案 1 :(得分:2)
如果您不想使用TryParse
,您可以执行类似
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
(Ctx.Request["okPress"].ToLower()=="true");
这样,如果字符串不是true / false,则只会假设为false而没有抛出异常。
这当然假设你很高兴将“鱼”的价值视为虚假而非例外。
但更好的是不要将其作为一条线。您通常没有最大数量的代码行,因此两行或三行简单的代码行通常比一行复杂的代码行更好...
答案 2 :(得分:1)
为什么不将字符串与true
进行比较?
bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
String.Compare(Ctx.Request["okPress"], "true", StringComparison.OrdinalIgnoreCase) == 0
答案 3 :(得分:1)
您可以使用Boolean
类的TryParse方法。
尝试转换逻辑的指定字符串表示形式 值为其布尔等效值。返回值表示是否 转换成功或失败。
bool result = Boolean.TryParse(Ctx.Request["okPress"]), out okPress);
如果成功转换了值,则返回true
;否则,false
。
答案 4 :(得分:0)
您的内联转换。
public static bool TryParseAsBoolean(this string expression)
{
bool booleanValue;
bool.TryParse(expression, out booleanValue);
return booleanValue;
}
bool okPress = Ctx.Request["okPress"].TryParseAsBoolean();