2010-02-01 15 views
7

Dada una instancia PropertyInfo, que tiene una propiedad Type, ¿cómo se determina si se trata de una estructura? Descubrí que hay propiedades como IsPrimitive, IsInterface, etc. pero no estoy seguro de cómo solicitar una estructura.¿Cómo determinar si Type es una estructura?

EDITAR: Para aclarar la pregunta. Supongamos que tengo un método:

public Boolean Check(PropertyInfo pi) 
{ 
    return pi.Type.IsStruct; 
} 

¿Qué debo escribir en lugar de IsStruct?

Respuesta

10

Type.IsValueType debería ser el truco.

(pellizcado de here)

+0

Gracias. Supongo que también tendré que comprobar si es IsPrimitive, pero eso debería ser el truco. –

+2

@Dejan: también las primitivas (como boolean) son estructuras. –

+0

Tienes razón, necesitarás el! Es primordial. ¿Qué tal un método de extensión? : D – OregonGhost

1

poner los comentarios en respuesta Antony Koch 's en un método de extensión:

public static class ReflectionExtensions { 
     public static bool IsCustomValueType(this Type type) {    
       return type.IsValueType && !type.IsPrimitive && type.Namespace != null && !type.Namespace.StartsWith("System."); 
     } 
    } 

debería funcionar

+0

Considere si desea incluir o excluir 'IsEnum', si solo está buscando estructuras personalizadas. –

1

Estructuras y enumeraciones (IsEnum) caen bajo el superconjunto tipos de valores llamados (IsValueType). Los tipos primitivos (IsPrimitive) son un subconjunto de struct. Lo que significa que todos los tipos primitivos son estructuras pero no al revés; por ejemplo, int es un tipo primitivo así como struct, pero decimal es solo una estructura, no un tipo primitivo.

Así que verá que la única propiedad que falta es la de una estructura. Fácil de escribir uno:

public bool IsStruct(this Type type) 
{ 
    return type.IsValueType && !type.IsEnum; 
} 
Cuestiones relacionadas