字符串到bool内联转换

时间:2013-04-02 10:10:17

标签: c# asp.net string boolean

我现在有什么:

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
    Convert.ToBoolean(Ctx.Request["okPress"]);

如果我在这里错了,请纠正我,但如果字符串不是“FormatException / true”或“True,则不会抛出false / False“?有没有办法在一行中处理转换,而不必担心异常?或者我需要使用Boolean.TryParse吗?

5 个答案:

答案 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();