如果我有一个从DB中提取true
或false
字符串的变量,
哪个是检查其价值的首选方式?
string value = "false";
if(Boolean.Parse(value)){
DoStuff();
}
我知道解析bool有不同的方法 - 这是一个例子
或
string value = "false";
if(value == "true"){
DoStuff();
}
我以string
格式从数据库中提取了很多真/假值,想知道这些方法是否会产生任何性能差异?
答案 0 :(得分:24)
string value = "false";
Boolean parsedValue;
if (Boolean.TryParse(value, out parsedValue))
{
if (parsedValue)
{
// do stuff
}
else
{
// do other stuff
}
}
else
{
// unable to parse
}
答案 1 :(得分:3)
我在这里看到的唯一问题是C#进行区分大小写的比较,因此如果数据库值为“True”
(value == "true")
会返回false。
但是看一下例子Boolean.Parse Method
string[] values = { null, String.Empty, "True", "False",
"true", "false", " true ", "0",
"1", "-1", "string" };
foreach (var value in values) {
try {
bool flag = Boolean.Parse(value);
Console.WriteLine("'{0}' --> {1}", value, flag);
}
catch (ArgumentException) {
Console.WriteLine("Cannot parse a null string.");
}
catch (FormatException) {
Console.WriteLine("Cannot parse '{0}'.", value);
}
}
// The example displays the following output:
// Cannot parse a null string.
// Cannot parse ''.
// 'True' --> True
// 'False' --> False
// 'true' --> True
// 'false' --> False
// ' true ' --> True
// Cannot parse '0'.
// Cannot parse '1'.
// Cannot parse '-1'.
// Cannot parse 'string'.
Bool.Parse看起来更健壮了。
答案 2 :(得分:2)
我总是会解析它 - 你的应用程序应该对无效值有效(即使你“知道”你的数据库总是有效的):
bool myVal;
if (!Boolean.TryParse(value, out myVal))
{
throw new InvalidCastException(...); // Or do something else
}
答案 3 :(得分:1)
确保使用Boolean.TryParse()
,您将避免出现可能弹出的区分大小写的问题。
答案 4 :(得分:0)
如果您知道该字符串是有效的"true"
或"false"
字符串,则首选方法。
否则,您可以使用Boolean.TryParse
答案 5 :(得分:0)
在要求性能时,没有解析的版本可能会更快。但正如其他人已经建议我也更喜欢解析解决方案。
答案 6 :(得分:0)
在 C# 7.0+ 中,您可以使用 inline variable declaration.
string value = "false";
if (bool.TryParse(value, out bool parsedValue))
{
if (parsedValue)
{
// do stuff
}
else
{
// do other stuff
}
}
else
{
// unable to parse
}
答案 7 :(得分:-1)
string value = "your text"
bool outresult = false;
bool resultado = false;
resultado = bool.TryParse(value, out outresult);
try parse函数会尝试将字符串的值转换为boolean,如果它不能返回变量outresult的值。