C# 如果变量为',则返回False;t布尔

C# 如果变量为',则返回False;t布尔,c#,boolean,C#,Boolean,如果可用不是真(不是bool),我的代码当前抛出异常可用不是bool,我怎么能让下面的代码返回False if (!Boolean.Parse(readValue("Useable"))) return true; return (defined.ContainsKey(key) || (key == "Useable")); 那么: return (readValue("Useable") == "TRUE"); 根据Drew的评论进行编辑这是最简单、最快的方法: bool isUseab

如果
可用
不是
(不是
bool
),我的代码当前抛出异常
可用
不是bool,我怎么能让下面的代码返回
False

if (!Boolean.Parse(readValue("Useable"))) return true;
return (defined.ContainsKey(key) || (key == "Useable"));
那么:

return (readValue("Useable") == "TRUE");

根据Drew的评论进行编辑这是最简单、最快的方法:

bool isUseable;
if (bool.TryParse(readValue("Useable"), out isUseable))
    return isUseable;
return false;
return "True".Equals(readValue("Useable"), StringComparison.OrdinalIgnoreCase);
注意:
Boolean.TryParse
不是一个好选择,因为它比简单的字符串比较慢得多。请查看此测试的结果(使用:

输出:

============ Boolean.TryParse vs. String comparison ============
tryParse         12.118 6.03
stringComparison 21.895 1.00

你错了…拼写不正确…代码来自前一位员工,但我没有发现拼写错误!谢谢应该是bool.TryParse(readValue(“Useable”),out isTrue),否则我也会这样做。在这段代码中初始化
isUseable
是没有意义的。你可以删除赋值,这是误导性的。@Drew:不确定“误导性的”。如果有什么区别的话,它更明确,但可能是多余的。我已经删除了它。@Andrew:看看reflector中的Boolean.TryParse,它做的字符串比较与您正在做的完全相同,所以我不得不质疑您的基准测试结果。@Kent——我选择误导这个词是因为它暗示(可能对一个更新手的程序员来说)如果解析失败,则在初始化器中指定的值仍然保留。请考虑您将其初始化为<代码> Trase< /Cord>。我在几次中调试了其他人的代码中的错误,这就是为什么我提到它。这是一个非常好的点绘制……在其他事情的中间回答!您也可以使用ST。ring.Equals(readValue(“Useable”),“TRUE”,StringComparison.OrdinalIgnoreCase),因为海报没有指明返回值的情况。顺序比较也更快。+1这里不需要进行解析(如果我正确理解了原始问题).有了这个片段,我可能会颠倒语法,这样就不会对字符串文字进行函数调用。这可能是个愚蠢的问题,但时间值的单位是什么?是stringComparison似乎比tryParse使用了更多的时间,还是我读错了?@Jon-对字符串文字进行方法调用有什么错?如果你颠倒了语法如果
readValue(“Useable”)
的结果是
null
@Lazarus,那么您可能最终会遇到
NullReferenceException
,这根本不是一个愚蠢的问题。来源:“基准测试结果有一个持续时间和一个迭代计数,以及为产生结果而运行的测试的描述性名称。可以对结果进行缩放,使持续时间或迭代计数与另一个结果匹配。同样,结果也有一个分数,它只是持续时间(以记号表示,但这是非常随意的)除以迭代计数…tsk tskm,神奇常数。这就是Boolean.TrueString的用途。您可以将此代码缩短为:
返回bool.TryParse(readValue(“Useable”),out isUseable)&&isUseable;
。我个人认为这更可读。
return "True".Equals(readValue("Useable"), StringComparison.OrdinalIgnoreCase);
using System;
using BenchmarkHelper;

class Example
{
    static void Main()
    {
        var results = TestSuite.Create
                ("Boolean.TryParse vs. String comparison", "True", true)
            .Add(tryParse)
            .Add(stringComparison)
            .RunTests()
            .ScaleByBest(ScalingMode.VaryDuration);

        results.Display(ResultColumns.NameAndDuration | ResultColumns.Score,
                results.FindBest());        
    }

    static Boolean tryParse(String input)
    {
        Boolean result;
        Boolean.TryParse(input, out result);
        return result;
    }

    static Boolean stringComparison(String input)
    {
        return "True".Equals(input, StringComparison.OrdinalIgnoreCase); 
    }
}
============ Boolean.TryParse vs. String comparison ============
tryParse         12.118 6.03
stringComparison 21.895 1.00