如何获取多维数组中最内层元素的类型?
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"
我希望能够获取数组内最内层元素类型,而不考虑数组的维数(阶数)。
如何获取多维数组中最内层元素的类型?
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"
我希望能够获取数组内最内层元素类型,而不考虑数组的维数(阶数)。
使用 GetElementType()
方法:
var t2 = qq.GetType().GetElementType().ToString();
Type
类型可能有一些可用的东西,但是找不到它。 - Cristian Diaconescu当你发现所需的方法不足时,可以编写自己的扩展方法。
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
返回该类型本身。