C# 字符串到布尔内联转换

C# 字符串到布尔内联转换,c#,asp.net,string,boolean,C#,Asp.net,String,Boolean,我目前拥有的: bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) && Convert.ToBoolean(Ctx.Request["okPress"]); 如果我在这里出错,请更正我,但是如果字符串不是“true/true”或“false/false”,这不会引发格式异常吗?有没有办法在一行中处理转换,而不必担心异常?或者我需要使用Boolean.TryParse?您可以使用: 值得一提的是,这里

我目前拥有的:

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
    Convert.ToBoolean(Ctx.Request["okPress"]);
如果我在这里出错,请更正我,但是如果字符串不是“
true
/
true
”或“
false
/
false
”,这不会引发
格式异常吗?有没有办法在一行中处理转换,而不必担心异常?或者我需要使用
Boolean.TryParse

您可以使用:

值得一提的是,这里有一个“一行程序”,创建以下扩展,特别是在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”的值被视为false而不是异常


不过,更好的办法是不要把它当作一行来做。通常情况下,您没有最大数量的代码行,因此两行或三行简单的代码通常比一行复杂的代码要好…

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

bool okPress = !string.IsNullOrEmpty(Ctx.Request["okPress"]) &&
    String.Compare(Ctx.Request["okPress"], "true", StringComparison.OrdinalIgnoreCase) == 0
正如您所说的,您可以使用
Boolean
类的方法

尝试转换逻辑对象的指定字符串表示形式 值设置为其布尔等价项。返回值指示 转换成功或失败


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

您的内联转换

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

        bool.TryParse(expression, out booleanValue);

        return booleanValue;
    }

    bool okPress =  Ctx.Request["okPress"].TryParseAsBoolean();

您已经回答了自己的问题:使用
Boolean.TryParse
:-)@dtb Ok,但我不能使用上面的“内联解决方案”,对吗?
Boolean.TryParse
返回
true
false
无法解析
。所以你需要一条电话线,但要处理好每一个案件需要不止一条电话线。不,那就是双线解决方案。。。你为什么这么在乎它?您的首要任务应该是可读性和效率。但是,您将如何与Boolean.TryParse内联使用呢?你不能。是的,这是一个例外。它基于javascript
confirm()
,返回“true”或“false”。有什么理由一开始就将bool b声明为false吗?它总是由TryParse设置的,不是吗,所以在传递之前根本不需要初始化…@Chris:疼吗?我已经用
false
初始化了它,以显示
TryGetBool
的默认值。。。对我来说,这意味着它正在做一些事情。例如,它正在设置默认值,因此,如果要将其更改为true,则新的默认值将是。已经说过了,你已经回答了我的问题,为什么要这样做。我可能不同意你的观点,但我认为这可能只是个人对编码的偏好我不得不修复开发人员初始化变量以丢弃初始化值的代码(比上面简单的
out
稍微复杂),但忽略了某个从未重新分配的逻辑路径。当然,编译器并不在意,因为他们确实指定了一个默认的无效值。我完全赞成只分配重要的值。我也见过很多类似上面的用法,没有经验的程序员分配初始值,认为它将是“如果解析失败,则默认”值,当然不是这样。
TryParse
的全部目的是避免可能的异常。所以你的代码没有多大意义。你永远不会进入
Catch
块。你是对的,当你同时做很多事情时,就会发生这种情况。不过,感谢您指出:)既然我在字符串上使用它,它不应该是
这个字符串吗?
bool result = Boolean.TryParse(Ctx.Request["okPress"]), out okPress);
    public static bool TryParseAsBoolean(this string expression)
    {
        bool booleanValue;

        bool.TryParse(expression, out booleanValue);

        return booleanValue;
    }

    bool okPress =  Ctx.Request["okPress"].TryParseAsBoolean();