Cuando se encontró que hay una falta de métodos fuera de la caja de lo que necesita, siempre puede escribir sus propios métodos de extensión.
public static Type GetEssenceType(this Type node) {
for(Type head=node, next; ; node=next)
if(null==(next=node.GetElementType()))
return node!=head?node:null;
}
Devuelve el más interior elemento de tipo (que se llama el tipo esencia) si el tipo determinado (llamado node
en el código) era un tipo que tiene elemento de tipo; de lo contrario, null
.
Editar:
Type
tiene un método interno hace lo similar:
internal virtual Type GetRootElementType()
{
Type elementType = this;
while (elementType.HasElementType)
{
elementType = elementType.GetElementType();
}
return elementType;
}
Se puede crear un delegado o usarlo a través de la reflexión:
var bindingAttr=BindingFlags.Instance|BindingFlags.NonPublic;
var method=typeof(Type).GetMethod("GetRootElementType", bindingAttr);
var rootElementType=(Type)method.Invoke(givenType, null);
Tenga en cuenta que GetRootElementType
devuelve el tipo dado si no tiene el tipo de elemento.
Algo a lo largo de las líneas de var qq = new int [2,3] {{1, 2, 3}, {1, 2, 4}}; var bounds = Enumerable.Range (0, qq.Rank) .Seleccione (r => qq.GetLowerBound (r)). ToArray(); var fst = qq.GetValue (límites); pero es defectuoso y complicado. –