由于某些奇怪的原因,当我尝试添加到我的类中声明的列表时,我的代码会抛出一个对象引用错误。我的_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;
}
答案 0 :(得分:4)
这是因为你永远不会实例化列表。在Machines类的构造函数中,您需要添加:
this._machineName = new List<string();
顺便说一句,公共财产不应该以下划线开头。
答案 1 :(得分:1)
您的财产
public List<string>_machineName { get; set; }
允许您访问_machineName,但您实际上从未创建过List。如果您将以下行添加到构造函数中,它将实例化List,然后您就可以添加到它。
_machineName = new List<string>;
BTW,公共财产的名称通常是大写字母,所以我将名称从_machineName更改为MachineName。
答案 2 :(得分:0)
在尝试对_machineName
列表的引用进行操作之前,将抛出ObjectReferenceException,直到它被实例化为止,这发生在GetMachineList()
函数内部。
您必须在该方法之外移动此对象的实例化,无论是在构造函数中还是在类体中,或者您必须在调用_machineName
之前调用该方法