我正在使用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;
}
答案 0 :(得分:1)
转换您的值一次,而不是两次转换相同的值。
尝试这样做。
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
数据类型。
答案 1 :(得分:0)
而不是使用&#34; Parse&#34;方法,使用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;
}
答案 2 :(得分:0)
我将回答我的问题,因为我发现了我的错误,我希望它能帮助所有人阅读这篇文章。
使用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;
}