说我有这些类:如何确定类型数组中的继承类?
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]总是一只动物,不是老虎
说我有这些类:如何确定类型数组中的继承类?
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]总是一只动物,不是老虎
你有没有tryed这一点?
p[0].GetType() == typeof(Tiger)
您可以使用Enumerable.OfType<TResult> Method
如:
var tigersInArray = p.OfType<Tiger>();
以上将从数组中返回Tiger
(s)。
您的支票(p[0] is Tiger)
应该工作,确保您在阵列中的位置0
有虎。
这并不完全是这个问题所要求的:这个答案是“我如何找到所有类型为'X'的元素”,而不是“我如何找到什么类型的元素'n”。 – 2013-04-25 12:57:58
丹,我在答案中有这个,但随后将其删除。我相信OPs检查很好,它只是在'0'位置没有Tiger的数组元素 – Habib 2013-04-25 13:01:38
这是一只动物和一只老虎,因为老虎是一只动物。只要您将Tiger放入数组中,您将失去有关特定类型的信息,但对象本身仍然知道。
,您仍然可以找出它的类型和它转换回:
if (p[0] is Tiger)
Tiger tiger = (Tiger)p[0];
或
Tiger tiger = p[0] as Tiger;
if (tiger != null)
...
它似乎没问题。你能给一些真实的代码示例吗? – 2013-04-25 12:53:08
更正你自己的错误代码并在Linqpad中运行,我看到'(p [0]是Tiger)'返回'true',并且'p [0] .GetType()== typeof(Tiger)'也是' TRUE'。你收到什么信息?你在代码中究竟做了什么? – 2013-04-25 13:00:37
你需要发布你的完整代码,然后 - 上面的代码是无效的C#,你显然有错误,我们看不到:-) – 2013-04-25 14:15:11