C# FormatException,将字符串转换为长字符串

C# FormatException,将字符串转换为长字符串,c#,xml,xmldocument,formatexception,C#,Xml,Xmldocument,Formatexception,我从一个XML文件中获取值,并将它们放在一个dataGridView中。我成功地做到了这一点,但在我想要操作从XML文件中获取的数据之后,它不起作用,并且我得到一个错误,即输入字符串的格式不正确。 var xDoc = new XDocument( new XDeclaration("1.0", "UTF-8", "no"), new XElement("root", new XElement("account",

我从一个XML文件中获取值,并将它们放在一个
dataGridView
中。我成功地做到了这一点,但在我想要操作从XML文件中获取的数据之后,它不起作用,并且我得到一个错误,即输入字符串的格式不正确。

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
我的目标是转换从XML文件捕获的数据并将其除以1024。
InnerText
不是一个可以安全地转换为长字符串的字符串吗?我应该添加更多的代码来实现这一点吗

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
在调试过程中,我打印出了temp的值,该值为53999759360,我还尝试不将其设置为ToString(),同样的错误

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
这是我代码的一部分:(size的值是“53999759360”)

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}

恐怕你的代码工作正常。“temp”变量必须是string.Empty或空白

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
我创建了一个XmlDocument(抱歉,来自XDocument,我认为它更容易使用),它看起来像您的目标并运行了您的代码。它运行良好,并给出适当的值:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
编辑: 这里有一种更简单的方法来测试实际发生的情况:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above

恐怕你的代码工作正常。“temp”变量必须是string.Empty或空白

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
我创建了一个XmlDocument(抱歉,来自XDocument,我认为它更容易使用),它看起来像您的目标并运行了您的代码。它运行良好,并给出适当的值:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
编辑: 这里有一种更简单的方法来测试实际发生的情况:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above

恐怕你的代码工作正常。“temp”变量必须是string.Empty或空白

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
我创建了一个XmlDocument(抱歉,来自XDocument,我认为它更容易使用),它看起来像您的目标并运行了您的代码。它运行良好,并给出适当的值:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
编辑: 这里有一种更简单的方法来测试实际发生的情况:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above

恐怕你的代码工作正常。“temp”变量必须是string.Empty或空白

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
我创建了一个XmlDocument(抱歉,来自XDocument,我认为它更容易使用),它看起来像您的目标并运行了您的代码。它运行良好,并给出适当的值:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
编辑: 这里有一种更简单的方法来测试实际发生的情况:

var xDoc = new XDocument(
            new XDeclaration("1.0", "UTF-8", "no"),
            new XElement("root",
                new XElement("account",
                    new XElement("systemInfo",
                        new XElement("dskInfo",
                            new XElement("dskInterface",
                                new XElement("size", 53999759360)))))));

var doc = new XmlDocument();
using (var xmlReader = xDoc.CreateReader())
{
    doc.Load(xmlReader);
}


XmlNodeList accountList = doc.GetElementsByTagName("account");

foreach (XmlNode node in accountList)
{
    XmlElement accountElement = (XmlElement)node;

    foreach (XmlElement dskInterface in node.SelectNodes("systemInfo/dskInfo/dskInterface"))
    {
        String temp = (dskInterface["size"].InnerText).ToString();
        long iasdas = Convert.ToInt64(temp) / 1024; // Error Happens here
    }
}
Convert.ToInt64(null); // Doesn't crash
Convert.ToInt64(string.Empty); // Crashes
Convert.ToInt64(""); // Will crash if you comment the line above
Convert.ToInt64(" "); // Will crash if you comment the lines above


在转换之前,temp的内容是什么。在那里放置一个断点并查看。该值肯定不是53999759360,因为这将是一个有效的Int64。调试时观察temp的值或输出一些日志消息以检查异常发生时的值。该值为53999759360,打印出temp的值,出现此问题已有一段时间了,而且我尝试不将其设置为字符串(),同样的问题我已经意识到我的尴尬错误,(@woni和Mark Hall)是的,你是对的,我一直在循环dskInfo中的一个大小确实是空的,非常感谢您在尝试转换之前对temp内容的所有帮助。在那里放置一个断点并查看。该值肯定不是53999759360,因为这将是一个有效的Int64。调试时观察temp的值或输出一些日志消息以检查异常发生时的值。该值为53999759360,打印出temp的值,出现此问题已有一段时间了,而且我尝试不将其设置为字符串(),同样的问题我已经意识到我的尴尬错误,(@woni和Mark Hall)是的,你是对的,我一直在循环dskInfo中的一个大小确实是空的,非常感谢您在尝试转换之前对temp内容的所有帮助。在那里放置一个断点并查看。该值肯定不是53999759360,因为这将是一个有效的Int64。调试时观察temp的值或输出一些日志消息以检查异常发生时的值。该值为53999759360,打印出temp的值,出现此问题已有一段时间了,而且我尝试不将其设置为字符串(),同样的问题我已经意识到我的尴尬错误,(@woni和Mark Hall)是的,你是对的,我一直在循环dskInfo中的一个大小确实是空的,非常感谢您在尝试转换之前对temp内容的所有帮助。在那里放置一个断点并查看。该值肯定不是53999759360,因为这将是一个有效的Int64。调试时观察temp的值或输出一些日志消息以检查异常发生时的值。该值为53999759360,打印出temp的值,出现此问题已有一段时间了,而且我尝试不将其设置为字符串(),同样的问题我已经意识到我的尴尬错误,(@woni和Mark Hall)是的,你是对的,我一直在循环dskInfo中的一个大小确实是空的,非常感谢所有的帮助Guy我已经意识到我的尴尬错误,我一直在循环dskInfo中的一个大小确实是空的,非常感谢我已经意识到我的尴尬错误,我一直在循环dskInfo中的一个大小确实是空的,非常感谢,我已经意识到我的尴尬错误,我一直在循环dskInfo中的一个大小确实为空,非常感谢,我已经意识到我的尴尬错误,我一直在循环dskInfo中的一个大小确实为空,非常感谢