繁体   English   中英

C#获取多维数组的类型

[英]C# Get the type of a multidimensional array

如何获取多维数组中最内层元素的类型?

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没有元素类型, GetRootElementType返回给定的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM