为什么我得到一个格式异常在这个c#代码

本文关键字:异常 格式 代码 一个 为什么 | 更新日期: 2023-09-27 18:13:02

我正在做一个Windows窗体应用程序。我正在解析XML文件并进行一些查询。例如,在本例中,我试图找到体重在55到100之间的所有用户。由于某种原因,当我运行这段代码时,我得到了一个未处理的格式异常。为什么我得到一个格式异常。我已经指出了发生异常的断点。我认为这是一个语法错误。谢谢你的帮助。

private bool UserWeighsBetween55and100(IEnumerable<XElement> paramsList) {
    bool result = false;
    foreach (XElement parameter in paramsList) {
        if (parameter.Attribute("name").Value == "Weight") {
  --->HERE     if ((Int32.Parse(parameter.Attribute("value").Value) > 55) &&
                   (Int32.Parse(parameter.Attribute("value").Value) < 100)){
                        return true;
                   }
               }
        }
        return result;
    }

为什么我得到一个格式异常在这个c#代码

一次转换而不是两次转换相同的值

试着这样做。

int iValue = 0;
if (Int.TryParse(parameter.Attribute("value").Value, out iValue)) //If the value converted
{
    if (iValue > 55 && iValue < 100)
    {
        return true;
    }
}
else //Failed to convert value into int datatype
{
    //Code here if conversion faild
}

如果parameter.Attribute("value").Value包含非数字值,则它不会转换为int数据类型。

不要使用"Parse"方法,而是使用tryParse.

在你的例子中,它看起来像:

foreach (XElement parameter in paramsList) {
    if (parameter.Attribute("name").Value == "Weight") {
    int value;
    if(!Int32.TryParse(parameter.Attribute("value").Value, out value)){
         //Not a number, handle this case
    }
    if ((value > 55) &&  (value < 100)){
        return true;
    }
    return result;
}

我将回答我的问题,因为我发现了我的错误,我希望它能帮助每个阅读这篇文章的人。

使用Int32.Parse()的问题是,当我解析XML文件时,我没有注意类型double的值。该代码的修复方法如下:

private bool UserWeighsBetween55and100(IEnumerable<XElement> paramsList) {
        bool result = false;
        foreach (XElement parameter in paramsList) {
            if (parameter.Attribute("name").Value == "Weight") {
                if ((parameter.Attribute("value").Value)!=null) {
                    if ((Convert.ToDouble(parameter.Attribute("value").Value) > 55) && (Convert.ToDouble(parameter.Attribute("value").Value) < 100)) {
                    return true;
                    }
                }
            }
        }
        return result;
    }