如何确定类型数组中的继承类?

时间:2013-04-25 12:50:43

标签: c#

说我有这些课程:

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]始终是动物,而不是老虎

3 个答案:

答案 0 :(得分:2)

您可以使用Enumerable.OfType<TResult> Method之类的:

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

以上内容会从数组中返回Tiger(s)。

您的支票(p[0] is Tiger)应该有效,请确保Tiger位于阵列中的0位置。

答案 1 :(得分:1)

它是动物虎,因为虎是动物。只要将Tiger放入数组中,就会丢失有关特定类型的信息,但对象本身仍然知道。

你仍然可以找出它的类型并将其丢回:

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

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

答案 2 :(得分:0)

你试过这个吗?

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