@lucky4

Почему ссылка на объект не указывает на экзмепляр класса?

Есть класс Студент, у которого поля стандартные(ФИО) и студента скиллы, оформленный как массив.
class Student {
		string[] _Skills;
		string _FirstName, _SecondName;

		public string FirstName {
			get { return _FirstName;  }
			set { value = _FirstName; }
		}

		public string SecondName {
			get { return _SecondName;  }
			set { value = _SecondName; }
		}

		public string[] Skills {
			get { return _Skills;  }
			set { value = _Skills; }
		}

		public void AddSkill(string skill) {
			Array.Resize(ref _Skills, this.Skills.Length + 1);
			this.Skills[this.Skills.Length - 1] = skill;
		}

		public void CheckSkill(string skill) {
		}

		public void Display() {
			Console.WriteLine(this.FirstName + " " + this.SecondName + " ");
		}

		public Student(string firstName, string secondName, string[] skills) {
			this.FirstName = firstName;
			this.SecondName = secondName;
			this.Skills = skills;
		}
	}


Потом я инициализирую объекты и вызываю две функции:
var students = new[] {
				new Student("Anton", "Antonov", new[] {"atletic" }),
				new Student("Bogdan", "Bogdanov", new[] { "mathematic", "adaptive", "liar"}),
				new Student("Ivan", "Ivanov", new[]{"educable", "quickly finds solutions"}),
			};


			students[2].AddSkill("clever");
                        students[2].Display();


И такой вот вопрос, почему выводит в консолье ошибку, что ссылка на объект не указывает на экзмепляр класса.
И второе что меня интересует, это то что при вызове Display() - выводит пустую строку.

Почему так происходит? Спасибо!
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
@vabka Куратор тега C#
Токсичный
У вас значения именам не присваиваются в свойствах.
У вас написано value=_FirstName
1. Свойства с теневым полем можно заменить на автосвойства (тогда NRE пропадёт)
2. Вместо массива для хранения скиллов использовать HashSet<string>
3. В геттере скиллов лучше возвращать IReadOnlySet или копию оригинального набора
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BasiC2k
@BasiC2k
Может есть смысл вместо:
Var students

Использовать явное объявление:
List<Student> students = new List<Student>;
А потом уже добавлять?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ЭЛКОМ+ Москва
от 70 000 до 165 000 ₽
от 3 500 до 4 000 $
deeplay Новосибирск
от 130 000 до 200 000 ₽
26 янв. 2021, в 19:29
7000 руб./за проект
26 янв. 2021, в 18:54
2000 руб./за проект