2011-05-04 58 views
0

这是我的C#代码。获取错误:未将对象引用设置为对象的实例

public class Person 
{ 
    public List<Employee> empDetails;   
} 


public class Employee 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
    public string proj { get; set; } 
    public string No { get; set; } 
} 
//This method is defined in a service 
    public void ReadFiles() 
    { 
     DirectoryInfo dir = new DirectoryInfo("E:/NewFolder/NewFiles"); 
     FileInfo[] files = dir.GetFiles("*.*"); 
     Person p = new Person(); 
     Employee e = new Employee(); 
     foreach (FileInfo f in files) 
     { 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(f.FullName); 
      e.empId = doc.GetElementsByTagName("Id")[0].InnerText; 
      e.empName = doc.GetElementsByTagName("Name")[0].InnerText; 
      e.empSeatNo = doc.GetElementsByTagName("No")[0].InnerText; 
      e.projGroup = doc.GetElementsByTagName("Grp")[0].InnerText;    
      p.empDetails.Add(e); //Here I get the error "Object reference not set to an instance of an object" 
     }   
     } 

任何帮助赞赏。

回答

2

Person类未初始化empDetails。大多数人会在构造函数中这样做。

public class Person 
{ 
    public Person() 
    { 
     empDetails = new List<Employee>(); 
    } 

    public List<Employee> empDetails { get; private set; } 
} 

此外,你的情况下的属性名称不遵循约定。通常它会EmpDetails甚至更好的EmployeeDetails。

2

该列表从不分配;这应该工作:

public class Person 
{ 
    private readonly List<Employee> empDetails = new List<Employee>(); 
    public List<Employee> EmploymentDetails { get { return empDetails; } } 
} 

(和访问.EmploymentDetails,即p.EmploymentDetails.Add(e);

相关问题