C# 方法仅在方法内声明时添加到列表中

C# 方法仅在方法内声明时添加到列表中,c#,xml,list,C#,Xml,List,由于某种奇怪的原因,当我试图添加到类中声明的列表时,代码抛出了一个对象引用错误。My_machineName属性可见。XML存在并具有数据。我确信这与我如何在方法中实例化机器有关。有什么建议吗?我画的是空白 public class Machines { public List<string>_machineName { get; set; } //list I would like to add to public Machines() {}

由于某种奇怪的原因,当我试图添加到类中声明的列表时,代码抛出了一个对象引用错误。My_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;
    }
公共类机器
{
public List_machineName{get;set;}//我要添加到的列表
公共机器()
{}
公共列表GetMachineList()
{
XmlDocument xml=新的XmlDocument();
列表_machinesList=新列表();
List str=new List();//有效的列表
字符串zdPath=GetZeroDeploymentPath();
zdPath=zdPath+@“\ZeroDeploymentService\XML\CatalogFile.XML”;
使用(XmlReader=XmlReader.Create(zdPath))
{
xmlReader.MoveToContent();
while(xmlReader.Read())
{
if(xmlReader.IsStartElement())
{
开关(xmlReader.Name.ToLower())
{
案例“machinename”:
str.Add(xmlReader.ReadString().Trim());//有效
_machineName.Add(xmlReader.ReadString().Trim());//失败
打破
}
}
}
}
返回机器列表;
}

这是因为您从未实例化列表。在Machines类的构造函数中,您需要添加:

this._machineName = new List<string();

this.\u machineName=new List这是因为您从未实例化该列表。在Machines类的构造函数中,您需要添加:

this._machineName = new List<string();

this.\u machineName=new List尝试对
\u machineName
列表的引用执行操作时,将引发ObjectReferenceException,直到它被实例化为止,这发生在
GetMachineList()函数中


您必须将此对象的实例化移动到该方法之外的构造函数中或类主体中,或者您必须在调用
\u machineName
之前调用该方法。当尝试对
\u machineName
列表的引用执行操作时,将引发ObjectReferenceExceptionl它是实例化的,发生在
GetMachineList()函数的内部

您必须将此对象的实例化移动到该方法之外的构造函数或类主体中,或者在调用属性之前调用该方法

public List<string>_machineName { get; set; }
public List_machineName{get;set;}
允许您访问_machineName,但您从未实际创建列表。如果您将以下行添加到构造函数中,它将实例化列表,那么您将能够添加到列表中

_machineName = new List<string>;
\u machineName=新列表;
顺便说一句,公共财产的名称通常是大写字母,因此我会将名称从_machineName更改为machineName。

您的财产

public List<string>_machineName { get; set; }
public List_machineName{get;set;}
允许您访问_machineName,但您从未实际创建列表。如果您将以下行添加到构造函数中,它将实例化列表,那么您将能够添加到列表中

_machineName = new List<string>;
\u machineName=新列表;

顺便说一句,公共属性的名称通常是大写字母,因此我会将名称从“machineName”更改为“machineName”。

方法中的“machineName”实例化在哪里?我没有看到它。实际上,在发布的代码中,“machineName”从来没有实例化过。很抱歉,我误读了-
\u machineilist
是实例化的,
\u machineName
从来都不是。方法中的machineName实例化在哪里?我看不到它。实际上,在发布的代码中,
从未实例化machineName
。很抱歉,我误读了-
\machineList
被实例化,
machineName
从来都不是。