2014-10-30 50 views
1

由於一些奇怪的原因,當我嘗試添加到在我的類中聲明的列表中時,我的代碼會引發對象引用錯誤。我的_machineName屬性是可見的。 XML存在並且有數據。我確信這與我在方法中實例化機器的方式有關。有什麼建議麼?我正在畫空白。方法只添加到列表中,如果在方法中聲明

public class Machines 
{ 
    public List<string>_machineName { get; set; } //list I would like to add to 

    public Machines() 
    {} 

    public List<Machines> GetMachineList() 
    { 
     XmlDocument xml = new XmlDocument(); 

     List<Machines> _machinesList = new List<Machines>(); 
     List<string> str = new List<string>(); //List that works 
     string zdPath = GetZeroDeploymentPath(); 

     zdPath = zdPath + @"\ZeroDeploymentService\XML\CatalogFile.xml"; 



     using (XmlReader xmlReader = XmlReader.Create(zdPath)) 
     { 
      xmlReader.MoveToContent(); 
      while (xmlReader.Read()) 
      { 
       if (xmlReader.IsStartElement()) 
       { 

        switch (xmlReader.Name.ToLower()) 
        { 
         case "machinename": 
          str.Add(xmlReader.ReadString().Trim()); //Works 
          _machineName.Add(xmlReader.ReadString().Trim()); //Fails 
         break; 
        } 
       } 
      } 
     } 

     return _machinesList; 
    } 

回答

4

這是因爲你從不實例化列表。在機器類的構造函數中,您需要添加:

this._machineName = new List<string(); 

另外,公共屬性不應以下劃線開頭。

0

嘗試作用於_machineName列表的引用時,將拋出ObjectReferenceException,直到它被實例化,這發生在您的GetMachineList()函數內部。

你必須將你要麼之外的方法,進入任何一個構造函數或類主體此對象的實例,否則你就必須調用_machineName

+0

_machineName在方法中實例化了嗎?我沒看到它。 – 2014-10-30 16:48:53

+0

實際上在發佈的代碼中_machineName永遠不會被實例化。 – Tim 2014-10-30 16:49:26

+0

對不起,我誤讀 - '_machineList'被實例化,'_machineName'永遠不會。 – 2014-10-30 17:20:34

1

你的屬性之前調用該方法

public List<string>_machineName { get; set; } 

允許你訪問_machineName,但你永遠不會創建列表。如果您將以下行添加到您的構造函數中,它將實例化列表,然後您將能夠添加到它。

_machineName = new List<string>; 

BTW,公共屬性的名稱通常是大寫字母,所以我會從_MachineName將名稱更改爲計算機名。