2013-04-25 31 views
-1

說我有這些類:如何確定類型數組中的繼承類?

Class Animal; 

Class Tiger: Animal; 
Class Bear: Animal; 
Class Giraffe: Animal; 

這陣:

Animal[] p = [new Tiger(), new Bear(), now Giraffe()] 

如何確定:

(p[0] is Tiger) 

我得到一個消息,P [0]總是一隻動物,不是老虎

+2

它似乎沒問題。你能給一些真實的代碼示例嗎? – 2013-04-25 12:53:08

+1

更正你自己的錯誤代碼並在Linqpad中運行,我看到'(p [0]是Tiger)'返回'true',並且'p [0] .GetType()== typeof(Tiger)'也是' TRUE'。你收到什麼信息?你在代碼中究竟做了什麼? – 2013-04-25 13:00:37

+0

你需要發佈你的完整代碼,然後 - 上面的代碼是無效的C#,你顯然有錯誤,我們看不到:-) – 2013-04-25 14:15:11

回答

0

你有沒有tryed這一點?

p[0].GetType() == typeof(Tiger) 
2

您可以使用Enumerable.OfType<TResult> Method如:

var tigersInArray = p.OfType<Tiger>(); 

以上將從數組中返回Tiger(s)。

您的支票(p[0] is Tiger)應該工作,確保您在陣列中的位置0有虎。

+1

這並不完全是這個問題所要求的:這個答案是「我如何找到所有類型爲'X'的元素」,而不是「我如何找到什麼類型的元素'n」。 – 2013-04-25 12:57:58

+0

丹,我在答案中有這個,但隨後將其刪除。我相信OPs檢查很好,它只是在'0'位置沒有Tiger的數組元素 – Habib 2013-04-25 13:01:38

1

這是一隻動物一隻老虎,因爲老虎是一隻動物。只要您將Tiger放入數組中,您將失去有關特定類型的信息,但對象本身仍然知道。

,您仍然可以找出它的類型和它轉換回:

if (p[0] is Tiger) 
    Tiger tiger = (Tiger)p[0]; 

Tiger tiger = p[0] as Tiger; 
if (tiger != null) 
    ...