Можно ли использовать List <T> за пределами Main ()?

Я пытаюсь создать простую систему ввода данных в C # (только для самообучения) и пытаюсь понять List. Я делаю простую консольную систему для ввода данных, вставляю учеников и учителей (которые имеют название, имя, фамилию, доб, учебный курс или обученный курс и т. Д. И т. Д.). Я также хотел добавить в массив каждого вновь созданного человека (учителя или ученика) с его уникальным номером. Затем я обнаружил списки. Теперь вот моя проблема:

У меня есть личный базовый класс и учитель, ученические классы, которые наследуют. В Main я могу создать новую var stu1, создать список с именем Studentslist и добавить в этот список stu1, stu2, stuX. Я могу получить доступ к списку и т. Д.

Но я бы хотел сделать это в классе учеников. Если я сделаю это в конструкторе, он создаст список студентов. Но затем, когда я перехожу к использованию метода addStu to list (мой собственный метод в классе Student) или добавляю его, как только создается список (я попробовал несколько разных подходов), я вижу, как данные попадают в список но когда я позвоню в main, список будет нулевым, и я получу

  

System.NullReferenceException: 'Ссылка на объект не установлена ​​на экземпляр   объекта '

Вот мой код:

public Student(string title, string name, string surname, string dob, string degreename = "") : base(title, name, surname, dob)
    {

        if (stucount == 0) // if this is the very first student, create the list Studentslist for the very first time AND and the very first student to the list
        {
            stucount++;
            List<string> Studentslist = new List<string>();
            Studentslist.Add(this.getStuIDtitleNameSurname()); // this part goes OK, however if I try access this from Main, it will throw System.NullReferenceException

        }
        else
        { stucount++;

            string studat = this.getStuIDtitleNameSurname();
            Studentslist.Add(studat); //when I add a another student in Main (I only have one Main, that is in the Program.cs) the code breaks here. 

        }

Как я уже сказал, если я сделаю все это в Main, все будет хорошо и прекрасно, так как я думаю, что это работает в этом случае с main. Возможно, то, как я это делаю, не то, как это нужно делать. Может кто-нибудь мудрее просветит меня :) Есть ли способ, где я могу хранить это где-нибудь в памяти /базе данных, или мне нужно выполнить работу в Main в этом случае.

4 голоса | спросил oko 28 Jam1000000amMon, 28 Jan 2019 11:48:09 +030019 2019, 11:48:09

1 ответ


0
Каждый ---- +: = 0 =: + ---- является новой областью действия.Поэтому, чтобы это работало, обязательно определите свою переменную перед новыми областями.например, до ---- +: = 1 =: + ---- , ---- +: = 2 =: + ---- и т. д.Это также относится к классам.Определение переменных после пространства имен помещает их в область уровня класса.Подсказка :В современном программировании вы всегда должны избегать использования счетчиков.Если вы чувствуете, что это единственное решение, у вас может быть другая проблема.Вы должны держать это простым и чистым.Вы должны использовать конструкторы уровня класса для инициализации переменных.Это особенно важно при внедрении зависимости.Также базовые классы не одобряются.Это нарушает принципы SOLID .Всегда помните ---- +: = 4 =: + ---- (Они используют базу в школе /университете, чтобы научить вас наследованию, но вы сделаете это, только если вы создаете фреймворки, например .NET, где достаточно времении рассмотрение ставится на выбор наследства)Лучшая версия была бы ...Похоже, вы изучаете программирование, поэтому я бы посоветовал прочитать книгу «Шаблоны проектирования».
ответил ppumkin 28 Jam1000000amMon, 28 Jan 2019 11:53:09 +030019 2019, 11:53:09

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132