#c#
#c#
Вопрос:
У меня есть существующий массив объектов (животных), и я хочу перебрать массив и создать новый список объектов (собака).Ниже приведен мой код, просто интересно, есть ли хороший способ привести код в порядок, поэтому я стану одной строкой.
var dogs = new List<dog>();
animals.ForEach(item => dogs.Add(new
dog()
{
dog.name = item.name
}));
ожидается
new List<dog>()
{
animals.....
}
Комментарии:
1. Может быть Linq ?
var dogs = animals.Select(item => new dog() {name = item.name}).ToList();
Ответ №1:
Вы можете использовать LinQ для получения списка строк для списка типов объектов. Однако LinQ запускает цикл for в фоновом режиме.
var dogs= animals.Select(x=> new dog() {name = x.name}).ToList();
Ответ №2:
Логически я бы ожидал, что Dog наследует от класса Animal, и если вы знаете, что все ваши животные — собаки, тогда вы можете использовать:
var dogs = animals.Cast<Dog>();
Или вы можете получить только собак из Animals:
var dogs = animals.OfType<Dog>();
Другими словами, ожидается, что ваш список будет сгенерирован примерно так:
var animals = new List<Animal> {
new Dog {Name="Shephard"},
new Dog {Name="Whisky"},
};
и вы могли бы использовать Cast() . Или, если это было:
var animals = new List<Animal> {
new Dog {Name="Shephard"},
new Dog {Name="Whisky"},
new Cat {Name="Garfield"}
};
вы могли бы использовать OfType() . Если ни то, ни другое, вам нужно будет создать новый список, например:
var dogs = animals // .Where(x => x.IsDog(...))
.Select(x => new Dog {Name = x.Name
// , X = x.X,
// ...
});