字符串到布尔的内联转换

本文关键字:转换 布尔 字符串 | 更新日期: 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();