Ho un blocco di codice che serializza un tipo in un tag HTML.Come verificare se il tipo è primitivo
Type t = typeof(T); // I pass <T> in as a paramter, where myObj is of type T
tagBuilder.Attributes.Add("class", t.Name);
foreach (PropertyInfo prop in t.GetProperties())
{
object propValue = prop.GetValue(myObj, null);
string stringValue = propValue != null ? propValue.ToString() : String.Empty;
tagBuilder.Attributes.Add(prop.Name, stringValue);
}
Questa grande opera, tranne che voglio fare solo questo per i tipi primitivi, come int
, double
, bool
ecc, e di altri tipi che non sono primitive, ma può essere serializzato facilmente come string
. Voglio che ignori tutto il resto come gli elenchi & altri tipi personalizzati.
Qualcuno può suggerire come faccio? O devo specificare i tipi che voglio consentire da qualche parte e attivare il tipo di proprietà per vedere se è permesso? È un po 'complicato, quindi sarebbe bello se io avessi un modo più ordinato.
'System.String' non è un tipo primitivo. – SLaks
Il modo migliore per farlo è non usare affatto i generici. Se si supporta un numero limitato di tipi come tipi di parametri legali, è sufficiente disporre di molti sovraccarichi. Se si supporta qualsiasi tipo che implementa ISerializable, quindi scrivere un metodo non generico che richiede ISerializable. Usa i generici per cose che sono in realtà * generiche *; se il tipo conta davvero, probabilmente non è generico. –
@Eric: Grazie, mi chiedo anche se è possibile utilizzare gli stessi criteri con i numeri? Ad esempio, per scrivere funzioni matematiche che supportano tutti i tipi numerici, cioè Media, Somma, ecc.Dovrebbero essere implementati usando generici o sovraccarichi? Importa se l'implementazione è la stessa o no? Perché è praticamente la stessa operazione per Average, Sum per qualsiasi tipo numerico, giusto? –