在现有数组的基础上创建一个新的数组对象



我有一个对象(动物)的现有数组,我想循环遍历数组并创建一个对象(狗)的新列表。以下是我的代码,只是想知道是否有一个很好的方法来整理代码,所以我将成为一行。

var dogs = new List<dog>();
animals.ForEach(item => dogs.Add(new
dog()
{
dog.name = item.name
}));

预计

new List<dog>() 
{
animals.....
}

您可以使用LinQ获取对象类型的list的字符串列表。但是,LinQ在后台运行for循环。

var dogs= animals.Select(x=> new dog() {name = x.name}).ToList();

逻辑上我认为狗继承自Animal类,如果你知道你所有的动物都是狗,那么你可以Cast:

var dogs = animals.Cast<Dog>();

或者你只能从动物中得到狗:

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()。如果两者都不是,则需要生成一个新的List,如:

var dogs = animals // .Where(x => x.IsDog(...))
.Select(x => new Dog {Name = x.Name
// , X = x.X, 
// ...
});

最新更新