为什么bool.try解析不将值解析为TRUE或FALSE

Dee*_*mar 4 c#

请考虑以下代码.

bool somevariable;
bool.TryParse(Convert.ToString(Dataset.Tables[0].Rows[0]["SomeColumnName"]), out somevariable);
CheckBox.Checked = somevariable;
Run Code Online (Sandbox Code Playgroud)

在数据集中的"SomeColumnName"中,我的值为1.因此我假设这将在"somevariable"中将此1解析为TRUE.

但是当我尝试将此值解析为bool时,它总是返回false.

我不知道为什么.

Ode*_*ded 10

Boolean.Parse文档:

如果value等于Boolean.TrueString字段的值,则返回true;否则返回false.如果value等于Boolean.FalseString字段的值,则返回false.

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

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

return Convert.ToString(Dataset.Tables[0].Rows[0]["SomeColumnName"]) == "1";
Run Code Online (Sandbox Code Playgroud)

或直接转换为布尔值(感谢@Bolu):

return Convert.ToBoolean(Dataset.Tables[0].Rows[0]["SomeColumnName"]);
Run Code Online (Sandbox Code Playgroud)


Mic*_*uno 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)