Уникальное имя переменных в цикле c#
Я создаю лист направлений List<Direction> directions = new List<Direction>();, который содержит в себе объекты класса Direction, затем я в этот этот лист добавляю направление AddDirection(directions);, например "Владивосток-Москва" . Потом я создаю поезд List<Carriage> train1 = new List<Carriage>();, состоящий из объектов класса Carriage.
Соответственно, при создании нового направления AddDirection(directions); мне нужно создать новый поезд, но в данном коде я могу добавлять поезд только вручную, создавая новый лист. Но я хочу чтобы названия создавались сами, т.е. скорее всего это будет какой-то цикл, который создаёт новый лист, но уже с другим названием, например не train1, а train2, где 2 должна добавляться сама. Можно создать counter и при создании направления делать инкремент. Но как добавлять итератор i к строке не знаю. Как такое можно реализовать?
Есть задумка,можно создать ещё один лист, который содержит в себе листы train, но как-то слишком громоздко уже получается
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
List<Direction> directions = new List<Direction>();
Console.WriteLine("Добавить новое направление");
AddDirection(directions); //создаём направление
List<Carriage> train1 = new List<Carriage>(); //создаём поезд
AddCarriage(train, rand); //создаём несколько вагонов для поезда
AddCarriage(train, rand);
AddCarriage(train, rand);
}
static void AddCarriage(List<Carriage> train, Random rand)
{
train.Add(new Carriage(rand));
}
static void AddDirection(List<Direction> directions)
{
directions.Add(new Direction(Console.ReadLine()));
}
}
class Direction
{
public string Name { get; private set; }
public Direction(string name)
{
Name = name;
}
}
class Carriage
{
public int Capacity { get; private set; }
public Carriage(Random rand)
{
Capacity = rand.Next(30, 50);
}
}
Ответы (1 шт):
Если вы хотите создавать список поездов динамически, то вам нужен все тот же List. Но из-за того, что у вас поезд - это список вагонов, то у вас получится такая вот каша:
List<Carriage> train1 = new List<Carriage>();
List<List<Carriage>> trainList = new List<List<Carriage>>();
trainList.Add(train1);
Предлагаю вам сделать отдельный класс Train для поездов, тогда такой вложенности можно избежать. Ожидаемое вами поведение может быть реализовано примерно так (при добавлении направления создаем поезд с тремя вагонами):
class Program
{
static void Main(string[] args)
{
Random rand = new Random();
List<Direction> directions = new List<Direction>();
var trains = new List<Train>();
do
{
Console.WriteLine("Добавить новое направление");
var direction = new Direction(Console.ReadLine());
var train = new Train(direction);
train.AddCarriage(new Carriage(rand));
train.AddCarriage(new Carriage(rand));
train.AddCarriage(new Carriage(rand));
trains.Add(train);
directions.Add(direction);
Console.WriteLine("Нажмите 'q' для завершения или любую другую клавишу, чтобы продолжить");
} while (Console.ReadKey().Key != ConsoleKey.Q);
Console.ReadLine();
}
}
class Direction
{
public string Name { get; private set; }
public Direction(string name)
{
Name = name;
}
}
class Carriage
{
public int Capacity { get; private set; }
public Carriage(Random rand)
{
Capacity = rand.Next(30, 50);
}
}
class Train
{
private readonly List<Carriage> _carriages;
public Direction Direction { get; }
public IReadOnlyCollection<Carriage> Carriages
{
get { return _carriages; }
}
public Train(Direction direction)
{
Direction = direction;
_carriages = new List<Carriage>();
}
public void AddCarriage(Carriage carriage)
{
_carriages.Add(carriage);
}
}