2010-02-01 17 views
7

Data un'istanza PropertyInfo, che ha una proprietà Type, come si determina se si tratta di una struttura? Ho trovato che ci sono proprietà come IsPrimitive, IsInterface, ecc. Ma non sono sicuro di come chiedere una struttura?Come determinare se Type è una struct?

MODIFICA: Per chiarire la domanda. Supponiamo che io sono un metodo:

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

Cosa devo scrivere al posto di IsStruct?

risposta

10

Type.IsValueType dovrebbe fare il trucco.

(pizzicato da here)

+0

Grazie. Immagino che dovrò anche controllare! IsPrimitive, ma quello dovrebbe fare il trucco. –

+2

@Dejan: anche i primitivi (come booleano) sono strutture. –

+0

Hai ragione, hai bisogno del! IsPrimitive. Che dire di un metodo di estensione? : D – OregonGhost

1

mettere i commenti sul risposta Antony Koch s' in un metodo extention:

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

dovrebbe funzionare

+0

Considerare se si desidera includere o escludere 'IsEnum' - se si stanno cercando solo strutture personalizzate. –

1

Strutture ed enumerazioni (IsEnum) cadono sotto il superset chiamati tipi di valore (IsValueType). I tipi primitivi (IsPrimitive) sono un sottoinsieme di struct. Il che significa che tutti i tipi primitivi sono strutture ma non viceversa; per esempio, int è un tipo primitivo e struct, ma decimal è solo una struttura, non un tipo primitivo.

Così vedi l'unica proprietà mancante c'è quella di una struttura. Facile da scrivere:

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