2009-06-03 37 views
5

Nếu Chó tăng cường từ Động vật.Cách tốt nhất để truyền từ Động vật [] sang Chó []

Và tôi có Động vật [], điều mà tôi biết là chỉ chứa chó. Cách nhanh nhất/tốt nhất để có được bàn tay của tôi trên một con chó [] là gì? Tôi đã sử dụng ArrayList mới (oldarray) .ToArray (typeof (Dog)); cho đến nay, nhưng điều đó cảm thấy một chút vụng về, và tôi tự hỏi nếu có một cái gì đó thanh lịch hơn.

CẬP NHẬT: Sử dụng cấu hình .net 2.0. Nên có offcourse đề cập đến điều này ngay lập tức. Tôi hy vọng việc chỉnh sửa câu hỏi ban đầu sẽ tuân theo netiquette stackoverflow trong trường hợp này. Tôi đang mong chờ ngày mà chúng tôi có thể nâng cấp và sử dụng LINQ.

Bye, Lucas

+0

câu hỏi biên tập là không có vấn đề; đó là tính năng của nó. – Cheeso

Trả lời

11
var dog_arr = Array.Convert(animal_arr, x => (Dog) x); 
+0

Tôi đã phải sử dụng Array.ConvertAll. Khác hơn là tôi thực sự thích sự thanh lịch của giải pháp này. – Daver

+0

Rất tốt, cảm ơn bạn. –

6

Sử dụng LINQ này sẽ

oldarray.Cast<Dog>().ToArray(); 
+0

trong khi điều này là thanh lịch, nó cũng rất kém hiệu quả IMHO –

+0

Hiệu quả là một ý kiến? Tôi nghĩ rằng trình biên dịch sẽ có thể tự động sửa lỗi không hiệu quả được trình bày ở đây. Tôi cũng nghĩ rằng nó sẽ không làm điều đó. Hiếm khi có vấn đề, may mắn thay. – Lodewijk

2

Có lẽ bạn có thể tạo ra nó như là một [] array Chó ở nơi đầu tiên?

Given:

interface ICage { 
    Animal[] GetAnimals(); 
} 

Nếu bạn tạo một động vật [] array với Chó trong nó, bạn không thể bỏ các mảng:

class DogCage : ICage { 
    Animal[] GetAnimals() { return new Animal[] { spot, fido }; } 
} 

Nếu bạn tạo một Dog [] array với Chó ở nó, nó vẫn có thể được trả về dưới dạng mảng Animal [], nhưng bạn cũng có thể đưa mảng trở lại Dog [].

class DogCage : ICage { 
    Animal[] GetAnimals() { return new Dog[] { spot, fido }; } 
} 

Bây giờ điều này sẽ làm việc:

Dog[] dogs = (Dog[])cage.GetAnimals(); 
-3

Bạn có thể sử dụng một bộ sưu tập chung ví dụ Danh sách từ System.Collections.Generic thay vì một mảng sau đó sử dụng như sau:

List<Animal> animals = new List<Animal>(); 
animals.Add(new Dog()); 
List<Dog> dogs = animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; }); 

Nếu bạn thực sự cần nó trong một mảng bạn cũng có thể làm:

animals.ConvertAll(delegate(Animal animal) { return (Dog)animal; }).ToArray();  
Các vấn đề liên quan