Создайте новую базу объектов массива на основе существующего массива

#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, 
                                           // ...
                           });