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