如果在方法内声明,则仅添加到列表的方法

时间:2014-10-30 16:43:20

标签: c# xml list

由于某些奇怪的原因,当我尝试添加到我的类中声明的列表时,我的代码会抛出一个对象引用错误。我的_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;
    }

3 个答案:

答案 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之前调用该方法