TryParse在C#中的应用
本文关键字:应用 TryParse | 更新日期: 2023-09-27 17:47:47
当下面的'val'不是bool
时,我得到一个异常,我相信我可以使用TryParse
,但我不确定如何最好地将其与下面的代码一起使用。有人能帮忙吗?
checkBox.Checked = Convert.ToBoolean(val);
感谢
代码如下所示,用于确定字符串val
是否是有效的布尔值,如果是,则使用它来设置Checked
属性。您需要决定如果它不表示有效值,将采取什么操作。
bool result;
if (bool.TryParse(val, out result))
{
// val does represent a Boolean
checkBox.Checked = result;
}
else
{
// val does not represent a Boolean
}
假设它不是一个有效的布尔值,则不希望检查它:
bool result = false;
bool.TryParse(val, out result);
checkBox.Checked = result;
bool z = false;
if(Boolean.TryParse(val, out z))
{
checkBox.Checked = z;
}
请注意:解析和转换是不同的操作,可能会导致不同的结果。
bool isBool=false;
bool。TryParse(val,ref isBool)
if( isBool )
{
///ok;
}
else
{
// fail;
}
这取决于情况;如果您想要checkBox。检查为等于true如果val-如果它是字符串-解析为true,则使用以下内容:-
bool output;
checkBox.Checked = bool.TryParse(val, out output) && output;
如果bool不是字符串,那么您需要根据其类型来决定如何处理它,例如:-
checkBox.Checked = val != 0;
等等。
这里已经有了不错的答案。
然而,我要补充一点,使用TryParse要小心,因为与它的名称相反,它实际上仍然可以抛出ArgumentException!
这是我最讨厌的事之一。NET!:)
FWIW,以下内容在这种(或类似)情况下也可能派上用场。。。
bool myBool = val ?? false;
这是一个很好的老"零合并算子",非常好。
如果您感兴趣,请在此处阅读更多信息:http://msdn.microsoft.com/en-us/library/ms173224.aspx
刚刚发布了另一个问题的相同片段,但以下是我在项目中使用的代码,用于更好地处理各种版本的布尔值:
bool shouldCheck;
TryParseBool(val, out shouldCheck);
checkBox.Checked = shouldCheck;
/// <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'
/// </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;
}
}