Student_Engineer Ответов: 2

Почему он пуст, когда переменная печатается в consol в C#?


Я хочу утешить печать в ценности. Но значение равно 1, но когда я отлаживаю его, оно равно 0.
И экран не печатает.

Это может быть потому, что я неверно представляю переменную.

Что я уже пробовал:

Students.cs

public List<string> students= new List<string>();

        public static string Stud()
        {
            List<string> students = new List<string>();
            students.Add("Mary");
        }   



Program.cs

static void Main(string[] args)
        {
           Stud_Information.Stud();
            for (var i = 0; i < students.Count; i++)
            {
                Console.WriteLine("[" + i.ToString() + "] " + students[i] );
            }
            Console.ReadKey();
}


Выход: //пустой

Но я хочу вывести: Мэри

2 Ответов

Рейтинг:
2

F-ES Sitecore

Я не думаю, что этот код будет даже компилироваться, но в Stud вы определяете переменную под названием "students", которая является локальной для этого метода и существует только внутри этого метода. Когда этот метод прекращает выполнение переменной и все ее данные уничтожаются. Вы, вероятно, намерены Стад, чтобы добавить в свой глобальный список, называемый также студентов;

public List<string> students= new List<string>();

public static string Stud()
{
    students.Add("Mary");
} 


[no name]

Я хочу напечатать ценность студентов в consol.Я хочу, чтобы данные предыдущего класса были напечатаны, когда основной работает.Я не знаю, почему вы не смогли скомпилировать.

Рейтинг:
0

OriginalGriff

Здесь есть целый ряд проблем:
1)

public List<string> students= new List<string>();

        public static string Stud()
        {
            List<string> students = new List<string>();
            students.Add("Mary");
        }
У вас есть две переменные с одинаковым именем - students - и та, которая объявлена внутри метода Stud, "маскирует" класс первого уровня. Таким образом, любые операции, которые вы выполняете с учащимися внутри метода, не влияют на первый уровень класса - и поскольку он объявлен внутри тела метода, он является локальной переменной и будет отброшен при выходе метода. Как говорит F-ES Sitecore, вам вообще не нужно будет объявлять студентов внутри метода, вместо этого используйте версию уровня класса. Кроме...
2) шпилька-это static метод, что означает, что он не может получить доступ ни к одному экземпляру на основе членов класса - А класс level collection students не является static таким образом, это переменная экземпляра, доступ к которой возможен только через методы экземпляра и через экземпляр, а не через имя класса.
3) Вы не можете получить доступ к студентам непосредственно с Вашего компьютера. Main метод потому что он находится в другом классе:
static void Main(string[] args)
        {
           Stud_Information.Stud();
            for (var i = 0; i < students.Count; i++)
            {
                Console.WriteLine("[" + i.ToString() + "] " + students[i] );
            }
            Console.ReadKey();}
студенты просто не доступны вообще в Main, даже если бы вы добавили к нему!
4) Ваш код не будет компилироваться, потому что вы объявляете Stud как возвращающую строку, но на самом деле не возвращаете никакого значения!

Итак, попробуйте вот это:
public List<string> students= new List<string>();
public void Stud()
    {
    students.Add("Mary");
    }

Программы.в CS
 static void Main(string[] args)
    {
    Stud_Information si = new Stud_Information();
    si.Stud();
    for (var i = 0; i < si.students.Count; i++)
        {
        Console.WriteLine("[" + i.ToString() + "] " + si.students[i] );
        }
    Console.ReadKey();
}


[no name]

Большое спасибо. Я запросил много технической информации, а также поддержку, которую вы мне очень помогли. Большое вам спасибо за вашу помощь.

OriginalGriff

Всегда пожалуйста!

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

CPallini

5.