从Animal []到Dog []的最佳方式

时间:2009-06-03 11:12:00

标签: c# arrays casting

如果狗来自动物。

我有一个动物[],我碰巧知道只包含狗。什么是最快/最好的方式让我的手[狗]?我使用了新的ArrayList(oldarray).ToArray(typeof(Dog));到目前为止,但感觉有点笨拙,我想知道是否有更优雅的东西。

更新:使用.net 2.0配置文件。应该直接提到这个。我希望在这种情况下编辑原始问题符合stackoverflow网络礼节。我期待着我们可以升级和使用Linq的那一天。

再见,卢卡斯

4 个答案:

答案 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();