解析为布尔值或检查字符串值

本文关键字:检查 字符串 布尔值 | 更新日期: 2023-09-27 18:28:14

如果我有一个变量从DB中提取一个truefalse字符串,
检查其价值的首选方式是哪一种?

string value = "false";
if(Boolean.Parse(value)){
   DoStuff();
}

我知道解析bool有不同的方法-这是一个例子

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

我以string格式从数据库中提取了很多真/假值,想知道这些方法是否会带来任何性能差异?

解析为布尔值或检查字符串值

使用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
}

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

(value == "true")

将返回false。

但是看看例子布尔分析方法

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

我会一直解析它-你的应用程序应该对无效值保持健壮(即使你"知道"你的数据库总是有效的):

bool myVal;
if (!Boolean.TryParse(value, out myVal))
{
    throw new InvalidCastException(...); // Or do something else
}

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

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

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

否则,您可以使用Boolean.TryParse

在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
}
string value = "your text"
bool outresult = false;
bool resultado = false;
resultado = bool.TryParse(value, out outresult);

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