Преимущество этого синтаксиса связано с сокращением объема клавиатурного ввода. Хотя вложенные фигурные скобки могут затруднять чтение кода, если не позаботиться о надлежащем форматировании, вы только вообразите себе объем кода, который пришлось бы написать для наполнения следующего списка List объектов Rectangle без использования синтаксиса инициализации коллекций:
List
{
new Rectangle {
Height = 90, Width = 90,
Location = new Point { X = 10, Y = 10 }},
new Rectangle {
Height = 50,Width = 50,
Location = new Point { X = 2, Y = 2 }},
};
foreach (var r in myListOfRects)
{
Console.WriteLine(r);
}
Работа с классом List
Создайте новый проект консольного приложения под названием FunWithGenericCollections. Добавьте новый файл по имени Person.cs и поместите в него показанный ниже код (это тот же самый код с определением предыдущего класса Person):
namespace FunWithGenericCollections
{
public class Person
{
public int Age {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
public Person(){}
public Person(string firstName, string lastName, int age)
{
Age = age;
FirstName = firstName;
LastName = lastName;
}
public override string ToString()
{
return $"Name: {FirstName} {LastName}, Age: {Age}";
}
}
}
Удалите сгенерированный код из файла Program.cs и добавьте следующие операторы using:
using System;
using System.Collections.Generic;
using FunWithGenericCollections;
Первым будет исследоваться обобщенный класс List, который уже применялся ранее в главе. Класс List используется чаще других классов из пространства имен System.Collections.Generic, т.к. он позволяет динамически изменять размер контейнера. Чтобы ознакомиться с его особенностями, добавьте в класс Program метод UseGenericList(), в котором задействован класс List для манипулирования набором объектов Person; вспомните, что в классе Person определены три свойства (Age, FirstName и LastName), а также специальная реализация метода ToString():
static void UseGenericList()
{
// Создать список объектов Person и заполнить его с помощью
// синтаксиса инициализации объектов и коллекции.
List
{
new Person {FirstName= "Homer", LastName="Simpson", Age=47},
new Person {FirstName= "Marge", LastName="Simpson", Age=45},
new Person {FirstName= "Lisa", LastName="Simpson", Age=9},
new Person {FirstName= "Bart", LastName="Simpson", Age=8}
};
// Вывести количество элементов в списке.
Console.WriteLine("Items in list: {0}", people.Count);
// Выполнить перечисление по списку.
foreach (Person p in people)
{
Console.WriteLine(p);
}
// Вставить новый объект Person.
Console.WriteLine("\n->Inserting new person.");
people.Insert(2, new Person { FirstName = "Maggie",
LastName = "Simpson", Age = 2 });
Console.WriteLine("Items in list: {0}", people.Count);
// Скопировать данные в новый массив.
Person[] arrayOfPeople = people.ToArray();
foreach (Person p in arrayOfPeople) // Вывести имена
{
Console.WriteLine("First Names: {0}", p.FirstName);
}
}