Come scrivere un metodo semplice, che controlla se un tipo concreto è una struttura personalizzata (creata con public struct { };
) o meno.Come determinare se un tipo .NET è una struttura personalizzata?
Controllo Type.IsValueType
non è sufficiente, perché è anche vero per int
, long
, ecc, e l'aggiunta di un controllo per !IsPrimitiveType
non escluderà decimal
, DateTime
e forse alcuni altri tipi di valore. So che la maggior parte del costruito in tipi di valore sono in realtà "le strutture", ma voglio solo verificare la presenza di "struct custom"
Queste domande sono per lo più lo stesso, ma senza la risposta che ho bisogno:
EDIT: dalle risposte menzionato il "check per il prefisso 'sistema'" è stato il più stabile (anche se è ancora un hack). Alla fine ho deciso di creare un attributo con cui devi decorare la struttura, in modo che il framework lo riprenda come una struttura personalizzata. (L'altra scelta ho pensato è stato quello di creare un'interfaccia vuota, e lasciare che lo struct implementare tale interfaccia vuoto, ma il modo in cui attributo sembrava più elegante)
Qui è la mia originale checker struct personalizzato se qualcuno se interessati:
type.IsValueType && !type.IsPrimitive && !type.Namespace.StartsWith("System") && !type.IsEnum
Solo per curiosità, perché vuoi rilevarlo? – Joren
Fluent NHibernate + Auto Mapping: imposta tutte le strutture personalizzate da gestire come Componenti (oggetti valore); impostando qualsiasi altro tipo di valore come componente (come DateTime o decimale) si romperà l'intero framework (almeno lo fa in mono) – SztupY
Aggiungi su! type.IsEnum –