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

The*_*kZn 11 c# boolean

如果我有一个变量从DB 中提取一串true或 哪一个false,
这将是检查其值的首选方法?

string value = "false";

if(Boolean.Parse(value)){
   DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

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

string value = "false";

if(value == "true"){
   DoStuff();
}
Run Code Online (Sandbox Code Playgroud)

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

Pro*_*FOX 28

用途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
}
Run Code Online (Sandbox Code Playgroud)

  • 一个简写的替代方法是`bool parsed = Boolean.TryParse(stringToParse,out parsedValue)&& parsedValue;` (7认同)
  • @NewAmbition:不,因为如果转换成功,`TryParse` 返回 true,如果无法解析则返回 false。 (2认同)
  • @NewAmbition:是的,它将是一种替代方法。但是,如果您使用替代方法,则将无法找出转换是否成功。如果转换失败,它将仅返回false。如果使用我的代码,则可以找出转换是否成功。 (2认同)

Adr*_*der 6

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

(value == "true")
Run Code Online (Sandbox Code Playgroud)

会返回假。

但是看示例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'.
Run Code Online (Sandbox Code Playgroud)

Bool.Parse 似乎更健壮一点。