C# 为什么这段代码抛出NullReferenceException?

C# 为什么这段代码抛出NullReferenceException?,c#,nullreferenceexception,C#,Nullreferenceexception,主要节目是: public FileEntry ReadFileConfiguration(string id) { string configurationPath = "conf.xml"; XDocument data = XDocument.Load(configurationPath); return (from c in data.Descendants("file") where (c.Attribute("Id") != null &

主要节目是:

public FileEntry ReadFileConfiguration(string id)
{
    string configurationPath = "conf.xml";
    XDocument data = XDocument.Load(configurationPath);
    return (from c in data.Descendants("file")
        where (c.Attribute("Id") != null && c.Attribute("Id").Value.Equals(id)) 
        select new FileEntry()
        {
            Name = c.Element("Name").Value,
            Path = c.Element("Path").Value,
            SheduledTime = Convert.ToDateTime(c.Element("SheduledTime").Value),
            Size = (long)Convert.ToDouble( c.Element("Size").Value),
            IsFolder = Convert.ToBoolean( c.Element("IsFolder").Value),
            LastAccess = Convert.ToDateTime(c.Element("LastAccess").Value),
            DoEncrypt = Convert.ToBoolean( c.Element("DoEncrypt").Value)
        }).First();
}
我的XML页面是:

main()
{
    string id  = "C:\\Users\\Radhesh\\Documents\\Visual Studio 2008\\Projects\\Rme\\Rme\\test.txt";
    ReadFileConfiguration(id);
}
请问,有人能帮忙吗?

编辑,刚刚发现 这应该输出1或更高

如果成功,请在select之前添加where子句

然后更改为完全选择零件,并添加Name=c.ElementName.Value,第1行乘以1

编辑,刚刚发现了 这应该输出1或更高

如果成功,请在select之前添加where子句


然后更改为完全选择零件,并添加Name=c.ElementName.Value,第1行乘以1

我遵循了@Henk Holterman建议的步骤,下面是您看到空引用异常的原因。在您的选择中:

string configurationPath = "conf.xml";
XDocument data = XDocument.Load(configurationPath);
var files = from c in data.Descendants("file") select c;

Debug.WriteLine("Count = {0}", files.Count());

...
return files.First();
如果查看XML文件,您有:

LastAccess = Convert.ToDateTime(c.Element("LastAccess").Value)

简而言之,你有一个打字错误。查询的select部分找不到名为LastAccess的元素,因此引发空引用异常。

我遵循了@Henk Holterman建议的步骤,下面是看到空引用异常的原因。在您的选择中:

string configurationPath = "conf.xml";
XDocument data = XDocument.Load(configurationPath);
var files = from c in data.Descendants("file") select c;

Debug.WriteLine("Count = {0}", files.Count());

...
return files.First();
如果查看XML文件,您有:

LastAccess = Convert.ToDateTime(c.Element("LastAccess").Value)


简而言之,你有一个打字错误。查询的select部分找不到名为LastAccess的元素,因此引发空引用异常。

在哪一行引发异常?您至少可以花点时间格式化您的问题吗?列出异常中的行和stacktrace。您需要传递XML文件的完整路径,例如:string configurationPath=@C:\Users\Radhesh\Documents\visualstudio 2008\Projects\Rme\Rme\conf.xml@Shadow:取决于conf文件的位置,我认为。当路径错误时,Load将抛出NullRef以外的内容。引发异常的行是哪一行?您至少可以花点时间格式化您的问题吗?列出异常中的行和stacktrace。您需要传递XML文件的完整路径,例如:string configurationPath=@C:\Users\Radhesh\Documents\visualstudio 2008\Projects\Rme\Rme\conf.xml@Shadow:取决于conf文件的位置,我认为。当路径错误时,Load将抛出NullRef以外的内容。@在选择新文件条目后,harmmer异常将在return语句中抛出。您在错误的帖子下发表了评论。但这意味着例外情况来自未列出的代码?谢谢回复。但我认为我们不能在没有select语句的情况下编写查询,所以破坏它本身就会产生错误:我没有理解您。对象引用未设置为对象的实例。这是我为异常获取的附加信息。顺便说一句,我认为你应该接受@Henk的回答-是他打破它的方法导致了打字错误的发现。@harmmer异常在选择新文件条目后在return语句中抛出。你在错误的帖子下发表了评论。但这意味着例外情况来自未列出的代码?谢谢回复。但我认为我们不能在没有select语句的情况下编写查询,所以破坏它本身就会产生错误:我没有理解您。对象引用未设置为对象的实例。这是我为异常获取的附加信息。顺便说一句,我认为你应该接受@Henk的答案——正是他打破它的方法导致了错误的发现。错误发生:记住@Henk给你的技术——有时候追踪看似晦涩的错误的最好方法是将其分解,直到你找到真正的根本原因。错误发生:记住@Henk给你的技术-有时候,追踪看似晦涩难懂的bug的最佳方法是将其分解,直到找到真正的根本原因。
LastAccess = Convert.ToDateTime(c.Element("LastAccess").Value)
<LastAcess>7/9/2011 11:35:53 PM</LastAcess>