請考慮下面的代碼。爲什麼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