16

If I have a variable that pulls a string of true or false from the DB,
which would be the preferred way of checking its value?

string value = "false";

if(Boolean.Parse(value)){
   DoStuff();
}

I know there are different ways of parsing to bool - this is an example
or

string value = "false";

if(value == "true"){
   DoStuff();
}

I am pulling a lot of true/false values from the DB in string format, and want to know if these methods make any performance difference at all?

4

8 回答 8

39

使用Boolean.TryParse

string value = "false";
Boolean parsedValue;

if (Boolean.TryParse(value, out parsedValue))
{
      if (parsedValue)
      {
         // do stuff
      }
      else
      {
         // do other stuff
      }
}
else
{
   // unable to parse
}
于 2013-08-20T07:17:12.207 回答
7

我在这里可以看到的唯一问题是 C# 进行区分大小写的比较,所以如果数据库值为“True”

(value == "true")

将返回错误。

但是看示例Boolean.Parse 方法

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 似乎更健壮一些。

于 2013-08-20T07:15:54.543 回答
4

我总是会解析它 - 您的应用程序应该对无效值具有鲁棒性(即使您“知道”您的数据库将始终有效):

bool myVal;
if (!Boolean.TryParse(value, out myVal))
{
    throw new InvalidCastException(...); // Or do something else
}
于 2013-08-20T07:16:31.783 回答
2

确保使用Boolean.TryParse(),您将避免可能弹出的区分大小写的问题。

于 2013-08-20T07:16:45.440 回答
0

如果您知道该字符串将是有效的"true""false"字符串,则首选您的第一种方法。

否则,您可以使用Boolean.TryParse

于 2013-08-20T07:16:00.453 回答
0

当要求性能时,没有解析的版本可能会更快。但正如其他人已经建议的那样,我也更喜欢解析解决方案。

于 2013-08-20T07:17:32.443 回答
0

在 C# 7.0+ 中,您可以使用内联变量声明。

string value = "false";

if (bool.TryParse(value, out bool parsedValue))
{
    if (parsedValue)
    {
        // do stuff
    }
    else
    {
        // do other stuff
    }
}
else
{
    // unable to parse
}
于 2021-06-18T21:57:34.013 回答
-1
string value = "your text"
bool outresult = false;
bool resultado = false;

resultado = bool.TryParse(value, out outresult);

try parse 函数将尝试将字符串的值转换为布尔值,如果它不能返回变量 outresult 的值。

于 2018-02-09T12:56:13.547 回答