TryParse在C#中的应用

本文关键字:应用 TryParse | 更新日期: 2023-09-27 17:47:47

当下面的'val'不是bool时,我得到一个异常,我相信我可以使用TryParse,但我不确定如何最好地将其与下面的代码一起使用。有人能帮忙吗?

checkBox.Checked = Convert.ToBoolean(val);

感谢

TryParse在C#中的应用

代码如下所示,用于确定字符串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;
    }
}