2012-02-08 81 views

回答

10

Boolean.Parse文档:

真,如果值是等效于Boolean.TrueString字段的值;如果值等于Boolean.FalseString字段的值,则返回false。

10并不等同于字符串"true""false"

假设你SomeColumnName确实是一个布尔字段,你可以这样做:

return Convert.ToString(Dataset.Tables[0].Rows[0]["SomeColumnName"]) == "1"; 

或者直接转换为Boolean(感谢@Bolu):

return Convert.ToBoolean(Dataset.Tables[0].Rows[0]["SomeColumnName"]); 
+0

好的,谢谢。你能告诉我在我的情况下检查TRUE或FALSE的最佳方法是什么? – 2012-02-08 11:02:20

+0

@Oded:我可以使用:'Convert.ToBoolean(Dataset.Tables [0] .Rows [0] [“SomeColumnName”])'? – Bolu 2012-02-08 11:37:26

+0

@Bolu - 是的,应该可以正常工作。 – Oded 2012-02-08 11:38:56

3

两者from MSDN

当此方法返回时,如果转换成功,则如果值等于Boolean.TrueString o,则返回true如果值等于FalseString,则返回false。如果转换失败,则包含false。如果value为null或者不等于TrueString或FalseString字段的值,则转换将失败。

1不等同于Boolean.TrueString"true"或任何情况下的变体),以使转换失败(TryParse返回false)和输出参数(在这种情况下somevariable)被设定为default(bool)这是false

1

如果“1”是字符串,它不会将其解析为布尔值true。如果它是字符串“真”,那么它会将其解析为布尔真。

5

这里是我的例程,在许多项目中共享的文件:

/// <summary> 
    /// Legal values: Case insensitive strings TRUE/FALSE, T/F, YES/NO, Y/N, numbers (0 => false, non-zero => true) 
    /// Similar to "bool.TryParse(string text, out bool)" except that it handles values other than 'true'/'false' and handles numbers like C/C++ 
    /// </summary> 
    public static bool TryParseBool(object inVal, out bool retVal) 
    { 
     // There are a couple of built-in ways to convert values to boolean, but unfortunately they skip things like YES/NO, 1/0, T/F 
     //bool.TryParse(string, out bool retVal) (.NET 4.0 Only); Convert.ToBoolean(object) (requires try/catch) 
     inVal = (inVal ?? "").ToString().Trim().ToUpper(); 
     switch ((string)inVal) 
     { 
      case "TRUE": 
      case "T": 
      case "YES": 
      case "Y": 
       retVal = true; 
       return true; 
      case "FALSE": 
      case "F": 
      case "NO": 
      case "N": 
       retVal = false; 
       return true; 
      default: 
       // If value can be parsed as a number, 0==false, non-zero==true (old C/C++ usage) 
       double number; 
       if (double.TryParse((string)inVal, out number)) 
       { 
        retVal = (number != 0); 
        return true; 
       } 
       // If not a valid value for conversion, return false (not parsed) 
       retVal = false; 
       return false; 
     } 
    }