2013-04-25 54 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) 
    ...