Наверняка вы уже заметили нечто странное во всех этих примерах - их невозможно использовать для работы с большими объемами данных. Как хранить информацию о тысячах людей или точек на экране? Два базовых инструмента - массивы и коллекции разных типов, наиболее простым и распространенным из которых являются списки. Как несложно догадаться и то и то является классами, и то и то представляет собой набор значений, к которым можно обращаться по номеру-индексу, начинающемуся с нуля.
int[] intArray = new int[5];
int[,] multiDimensionalIntArray = new int[2, 3];
Person[] personsArray = new Person[2];
personsArray[0] = new Person("Пушкин", "Александр", "Сергеевич");
personsArray[1] = new Person("Гончарова", "Наталья", "Николаевна");
Console.WriteLine(personsArray.Count()); // выведет 2
Console.WriteLine(personsArray[1].Fio); // выведет Гончарова Наталья Николаевна
List<Person> personsList = new List<Person>();
personsList.Add(new Person("Пушкин", "Александр", "Сергеевич"));
personsList.Add(new Person("Гончарова", "Наталья", "Николаевна"));
System.Console.WriteLine(personsList.Count()); // выведет 2
System.Console.WriteLine(personsList[0].Fio); // выведет Пушкин Александр Сергеевич
for (int counter = 0; counter <= 1; counter++)
{
Console.WriteLine(personsList[counter].FioInitials);
}
В чем же отличие массивов от списков? Подробности относятся к продвинутым знаниям, но в целом под массив место в памяти выделяется сразу и если надо изменить его размер, то место приходится выделять заново. Под список фиксированный объем не выделяется, он меняется динамически, но операции над элементами выполняются медленнее. Таким образом массив быстрее и лучше работает, если количество элементов не меняется, список - если меняется. Но в большинстве случаев эта разница в скорости не заметна на фоне других факторов. Продвинутые программисты хорошо понимают разницу между ArrayList, Dictionary, HashSet, LinkedList, Collection и другими типами коллекций.
Обходить все элементы в каком-то множестве приходится так часто, что в большинстве современных языков для этого сделали особый цикл, в C# это цикл foreach, "для каждого".
foreach (Person currPerson in personsList)
{
// currPerson - currentPerson - текущий человек, код внутри цикла будет вызываться раз за разом и в этой переменной последовательно окажутся все элементы последовательности, для каждого из которых можно будет что-то сделать
Console.WriteLine(currPerson.FioInitials);
}
Выйти из цикла можно с помощью ключевых слов break - просто прекращается выполнение цикла и continue - пропускает текущую итерацию и переходит к следующей
foreach (Person currPerson in personsList)
{
// пропускаем Пушкина и переходим к гончаровой
if (currPerson.Surname == "Пушкин")
{
continue;
}
Console.WriteLine(currPerson.FioInitials);
}
foreach (Person currPerson in personsList)
{
// цикл не сделает ничего, так как на первом шаге его выполнение прервется
if (currPerson.Surname == "Пушкин")
{
break;
}
Console.WriteLine(currPerson.FioInitials);
}