如果狗来自动物。
我有一个动物[],我碰巧知道只包含狗。什么是最快/最好的方式让我的手[狗]?我使用了新的ArrayList(oldarray).ToArray(typeof(Dog));到目前为止,但感觉有点笨拙,我想知道是否有更优雅的东西。
更新:使用.net 2.0配置文件。应该直接提到这个。我希望在这种情况下编辑原始问题符合stackoverflow网络礼节。我期待着我们可以升级和使用Linq的那一天。
再见,卢卡斯
答案 0 :(得分:11)
var dog_arr = Array.Convert(animal_arr, x => (Dog) x);
答案 1 :(得分:6)
使用LINQ,这将是
oldarray.Cast<Dog>().ToArray();
答案 2 :(得分:2)
也许您首先可以将其创建为Dog []数组?
假设:
interface ICage {
Animal[] GetAnimals();
}
如果你实例化一个带有Dogs的Animal []数组,则无法强制转换数组:
class DogCage : ICage {
Animal[] GetAnimals() { return new Animal[] { spot, fido }; }
}
如果你实例化一个带有Dogs的Dog []数组,它仍然可以作为Animal []数组返回,但你也可以将数组转换回Dog []。
class DogCage : ICage {
Animal[] GetAnimals() { return new Dog[] { spot, fido }; }
}
现在这将有效:
Dog[] dogs = (Dog[])cage.GetAnimals();
答案 3 :(得分:-3)
您可以使用通用集合,例如从System.Collections.Generic
列出而不是数组,然后使用以下内容:
List<Animal> animals = new List<Animal>();
animals.Add(new Dog());
List<Dog> dogs = animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; });
如果你真的需要它,你也可以这样做:
animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; }).ToArray();