Как элегантно заполнить гетерогенный массив в C#
У меня есть 3 разных класса (1 родитель и 2 ребенка), и я создал гетерогенный массив:
Parent[] parentArray = new Parent[9];
Я хотел бы заполнить этот массив 3 родительскими объектами, 3 дочерними объектами и 3 дочерними объектами в указанном порядке.
Я хотел бы знать, есть ли более элегантный способ сделать это, чем просто сделать это:
parentArray[0] = new Parent();
parentArray[1] = new Parent();
parentArray[2] = new Parent();
parentArray[3] = new Child1();
parentArray[4] = new Child1();
....
parentArray[9] = new Child2();
Спасибо!
3 ответа
Лично я просто думаю, что вы должны использовать инициализатор объекта. Однако для чистой скуки вы можете использовать Linq и общий фабричный метод.
// Given
public static IEnumerable<T> Factory<T>(int count) where T : Parent, new()
=> Enumerable.Range(0, count).Select(x => new T());
...
// Usage
var array = Factory<Parent>(3)
.Union(Factory<Child1>(3))
.Union(Factory<Child2>(3))
.ToArray();
Как это?
var parentArray = new Parent[]
{
new Parent(),
new Parent(),
new Parent(),
new Child1(),
...
};
В этой ситуации вы хотите выполнить определенное количество действий повторно. Петли обычно используются для этого. Поскольку вы инициализируете массив, for
циклы хорошо подходят, так как они предоставляют целое число, которое можно использовать для индексации массива. В вашем сценарии вы можете использовать три таких цикла.
Parent[] parentArray = new Parent[9];
for (int i = 0; i < 3; i++)
{
parentArray[i] = new Parent();
}
for (int i = 3; i < 6; i++)
{
parentArray[i] = new Child1();
}
for (int i = 6; i < 9; i++)
{
parentArray[i] = new Child2();
}