为什么我得到一个格式异常在这个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;
}
一次转换而不是两次转换相同的值
试着这样做。
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;
}