C#获取多维数组的类型
本文关键字:类型 数组 获取 | 更新日期: 2023-09-27 18:19:51
如何获取多维数组最内部元素的类型?
var qq = new int[2,3]{{1,2,3}, {1,2,4}};
var t = qq.GetType().ToString();//is "System.Int32[,]"
var t2 = ??; // should be "System.Int32"
我想得到最里面的元素类型,而不管数组的维数(Rank)是多少。
使用GetElementType()
:
var t2 = qq.GetType().GetElementType().ToString();
当您发现缺少现成的方法时,您可以随时编写自己的扩展方法。
public static Type GetEssenceType(this Type node) {
for(Type head=node, next; ; node=next)
if(null==(next=node.GetElementType()))
return node!=head?node:null;
}
如果给定类型(在代码中命名为node
)是具有元素类型的类型,则它返回最内部的元素类型(我称之为本质类型);否则为null
。
编辑:
Type
有一个内部方法做类似的事情:
internal virtual Type GetRootElementType()
{
Type elementType = this;
while (elementType.HasElementType)
{
elementType = elementType.GetElementType();
}
return elementType;
}
您可以创建委托或通过反射使用它:
var bindingAttr=BindingFlags.Instance|BindingFlags.NonPublic;
var method=typeof(Type).GetMethod("GetRootElementType", bindingAttr);
var rootElementType=(Type)method.Invoke(givenType, null);
请注意,如果GetRootElementType
没有元素类型,它将返回给定的类型本身。