请考虑以下代码.
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.
1而0并不等同于字符串"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)
这是我的例程,它位于许多项目共享的文件中:
/// <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)
| 归档时间: |
|
| 查看次数: |
15517 次 |
| 最近记录: |