5

我目前拥有的:

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

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

4

5 回答 5

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();
于 2013-04-02T10:13:19.643 回答
2

如果你不想使用TryParse你可以做类似的事情

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

这样,如果字符串不是真/假,它只会为您假设假,不会抛出异常。

当然,这确实假设您很高兴将“fish”的值视为错误而不是异常。

更好的是不要将其作为单行来执行。您通常没有最大的代码行数,因此两三行简单的代码通常比一行复杂的代码要好...

于 2013-04-02T10:13:55.657 回答
1

为什么不将字符串与 比较true

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
    String.Compare(Ctx.Request["okPress"], "true", StringComparison.OrdinalIgnoreCase) == 0
于 2013-04-02T10:14:16.047 回答
1

正如你所说,你可以使用类的TryParse方法。Boolean

尝试将逻辑值的指定字符串表示形式转换为其等效的布尔值。返回值指示转换是成功还是失败。

bool result = Boolean.TryParse(Ctx.Request["okPress"]), out okPress);

true如果值转换成功,则返回;否则,false

于 2013-04-02T10:15:32.480 回答
0

您的内联转换。

    public static bool TryParseAsBoolean(this string expression)
    {
        bool booleanValue;

        bool.TryParse(expression, out booleanValue);

        return booleanValue;
    }

    bool okPress =  Ctx.Request["okPress"].TryParseAsBoolean();
于 2013-04-02T10:21:27.517 回答