日期:2014-05-16  浏览次数:20680 次

除了数组类型以外,还有哪些类型实现了Array接口?
我写了几行小程序,用控制台打印va.GetType和vb.GetType都不是Array,而是System.int32[]

var va = new int[] { 1, 2, 3 };
Array vb = va;
Console.WriteLine(va.GetType());
Console.WriteLine(vb.GetType());

为什么GetType返回的不是Array而不是System.Int32[]呢?

换句话说,什么类型的GetType()可能返回System.Array呢?
能否在运行时,用代码来判定一个object的实际类型,以及它的继承树呢?
反射机制能提供直接的判断吗? 还是需要IL的解析?
------解决方案--------------------
int[] 就是 Array。
------解决方案--------------------
你可以打印 va.GetType().BaseType ,或者判断一下 va is Array的值。

仅仅打印对象类型是不够的,要知道类型是可以继承的。甚至类型还会有interface。所以你直接打印类型名称这是不够的,还要打印其父类。
------解决方案--------------------
引用:
能否在运行时,用代码来判定一个object的实际类型,以及它的继承树呢?
反射机制能提供直接的判断吗? 还是需要IL的解析?


不需要反射。基本上没有什么地方需要反射。反射不是干这些事情的合适方法。

就像上面地,写
if(va is Array)
就能判断父类或者接口是否被实现。