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