请考虑下面的代码。为什么bool.try解析不解析值为TRUE或FALSE
在数据集“SomeColumnName”,我也值为1。因此,我认为,这将解析这个1“somevariable”为TRUE。
但是,当我试图解析这个值到布尔,它总是返回false。
我不知道为什么。
请考虑下面的代码。为什么bool.try解析不解析值为TRUE或FALSE
在数据集“SomeColumnName”,我也值为1。因此,我认为,这将解析这个1“somevariable”为TRUE。
但是,当我试图解析这个值到布尔,它总是返回false。
我不知道为什么。
从Boolean.Parse
文档:
真,如果值是等效于Boolean.TrueString字段的值;如果值等于Boolean.FalseString字段的值,则返回false。
1
和0
并不等同于字符串"true"
或"false"
。
假设你SomeColumnName
确实是一个布尔字段,你可以这样做:
return Convert.ToString(Dataset.Tables[0].Rows[0]["SomeColumnName"]) == "1";
或者直接转换为Boolean(感谢@Bolu):
return Convert.ToBoolean(Dataset.Tables[0].Rows[0]["SomeColumnName"]);
当此方法返回时,如果转换成功,则如果值等于Boolean.TrueString o,则返回true如果值等于FalseString,则返回false。如果转换失败,则包含false。如果value为null或者不等于TrueString或FalseString字段的值,则转换将失败。
1
不等同于Boolean.TrueString
("true"
或任何情况下的变体),以使转换失败(TryParse
返回false
)和输出参数(在这种情况下somevariable
)被设定为default(bool)
这是false
。
如果“1”是字符串,它不会将其解析为布尔值true。如果它是字符串“真”,那么它会将其解析为布尔真。
这里是我的例程,在许多项目中共享的文件:
/// <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;
}
}
好的,谢谢。你能告诉我在我的情况下检查TRUE或FALSE的最佳方法是什么? – 2012-02-08 11:02:20
@Oded:我可以使用:'Convert.ToBoolean(Dataset.Tables [0] .Rows [0] [“SomeColumnName”])'? – Bolu 2012-02-08 11:37:26
@Bolu - 是的,应该可以正常工作。 – Oded 2012-02-08 11:38:56