Заполнение и распечатка массива типа класса - PullRequest
0 голосов
/ 27 мая 2020

Хорошо, я не очень хорошо объясняю, но в основном у меня есть простой класс - скажем что-то вроде этого:

 class Dog
    {
        public String Name { get; set; }
        public String Breed { get; set; }
    }

Затем у меня есть этот другой класс:

static class DogData
{
    static public Dog[] Dogs 
    { 
        get
        {
            //Dog[] Dogs = new Dog[2]; - unnecessary, as pointed out by helpful Samaritans
            ResetDogData();
            return _dogs;
        }
        set { }
    }
    static public Dog[] _dogs;

    static private void ResetDogData()
    {

       Dog[] _dogs = new Dog[2];
       if (_dogs[0] == null)
        {
            _dogs[0] = new Dog();
            _dogs[0].Name = "Johny";
            _dogs[0].Breed = "German Shepard";
        }
        if (_dogs[1] == null)
        {
            _dogs[1] = new Dog();
            _dogs[1].Name = "Sally";
            _dogs[1].Breed = "Alaskan Malamute";
        }     
    }

Идея заключалась в том, чтобы массив Dogs заполнялся вводом с консоли, а если элемент массива равен нулю - получать его данные из ResetDogData (). Но прежде чем пытаться это сделать, я хотел проверить, работает ли ResetDogData ().

И вот в чем дело - каждый раз, когда я пытаюсь распечатать его, я либо получаю «Ссылка на объект не установлена ​​на экземпляр объекта», либо, если он компилируется, просто ничего не распечатывает (в зависимости от того, каким образом я пробовал это делать). Поэтому мне было интересно, ошибочен ли мой код или мне просто не хватает некоторых основ работы с массивами (например, моя ошибка заключается в том, как я пытаюсь распечатать массив).

Я был бы очень благодарен, если бы кто-нибудь сказал мне, что это за два и как правильно достичь того, чего я хочу.

1 Ответ

1 голос
/ 27 мая 2020

ResetDogData не изменяет член _dogs уровня класса - он создает локальную переменную _dogs, заполняет ее, а затем ничего не делает с ней.

Чтобы сбросить данные члена класса, измените

Dog[] _dogs = new Dog[2];

на

_dogs = new Dog[2];

внутри ResetDogData

, также вы можете избавиться от if a, так как вновь созданный массив будет всегда инициализироваться с помощью null:

static private void ResetDogData()
{

    _dogs = new Dog[2];

    _dogs[0] = new Dog();
    _dogs[0].Name = "Johny";
    _dogs[0].Breed = "German Shepard";

    _dogs[1] = new Dog();
    _dogs[1].Name = "Sally";
    _dogs[1].Breed = "Alaskan Malamute";

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...