метод добавляется только в список, если объявлен внутри метода

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;
    }
Теги:
list

3 ответа

4
Лучший ответ

Это потому, что вы никогда не создаете экземпляр списка. В конструкторе вашего класса "Машины" вам нужно добавить:

this._machineName = new List<string();

В стороне, общественная собственность не должна начинаться с подчеркивания.

1

Ваше имущество

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

позволяет вам получить доступ к _machineName, но вы фактически не создаете Список. Если вы добавите следующую строку в свой конструктор, она создаст экземпляр списка, после чего вы сможете добавить к нему.

_machineName = new List<string>;

Кстати, имя публичного имущества обычно является заглавной буквой, поэтому я бы изменил имя от _machineName до MachineName.

0

Исключение ObjectReferenceException будет вызываться при попытке действовать по ссылке вашего списка _machineName до момента его создания, что происходит внутри вашей функции GetMachineList().

Вам придется перенести свой экземпляр этого объекта либо вне этого метода, либо в конструктор, либо в тело класса, или вам придется вызвать этот метод до вызова _machineName

  • 0
    Где создается экземпляр _machineName в методе? Я этого не вижу
  • 0
    На самом деле в размещенном коде _machineName никогда не _machineName .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню