除了数组类型以外,还有哪些类型实现了Array接口?

skktuer 2014-03-01 05:34:19
我写了几行小程序,用控制台打印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的解析?
...全文
102 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 楼主 u013564778 的回复:
能否在运行时,用代码来判定一个object的实际类型,以及它的继承树呢? 反射机制能提供直接的判断吗? 还是需要IL的解析?
不需要反射。基本上没有什么地方需要反射。反射不是干这些事情的合适方法。 就像上面地,写
if(va is Array)
就能判断父类或者接口是否被实现。
  • 打赏
  • 举报
回复
你可以打印 va.GetType().BaseType ,或者判断一下 va is Array的值。 仅仅打印对象类型是不够的,要知道类型是可以继承的。甚至类型还会有interface。所以你直接打印类型名称这是不够的,还要打印其父类。
  • 打赏
  • 举报
回复
int[] 就是 Array。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧