2013-05-03 14 views
5

.NET conosce molti modi per convertire i tipi di dati:metodo uniforme per convertire i tipi di dati

  • Convert di classe;
  • Funzioni all'interno di un tipo come (Try)Parse e ToString, ecc .;
  • Implementazione interfaccia IConvertable;
  • TypeConverter;
  • Operatore di conversione implicita ed esplicita;
  • Mi manca un altro?

Quindi, se sto convertendo un tipo di dati in un altro, ho bisogno di conoscere entrambi i tipi e ho bisogno di sapere quale metodo di conversione utilizzare. E questo diventa piuttosto sgradevole se uno di questi due tipi (o entrambi) è un tipo generico.

Quindi la mia domanda è: io c'è un modo uniforme (generico) in .NET per convertire un tipo di dati in un altro, che potrebbe utilizzare tutti gli altri metodi limitati?

risposta

2

Un buon metodo generico per la conversione tra i tipi è con Convert.ChangeType. Ecco un esempio di come si potrebbe utilizzarlo per scrivere un metodo di conversione generico:

public static TResult Convert<TResult>(IConvertible source) 
{ 
    return (TResult)System.Convert.ChangeType(source, typeof(TResult)); 
} 

E, come altri metodi Convert, chiama internamente l'interfaccia IConvertible.

Questo non farà uso delle vostre altre opzioni di conversione:

  • Il più comune che ci avrei pensato sarebbe ToString; per questo, è possibile aggiungere un assegno per verificare se TResult è string e in tal caso, (dopo i controlli nulli appropriati), è sufficiente chiamare ToString sul proprio input.
  • utilizzando la riflessione si potrebbe verificare la presenza di:
    • il TypeConverterAttribute (TypeDescriptor.GetConverter sembra essere la strada da percorrere da lì)
    • (Try)Parse metodi, (che ci si richiama), e
    • conversione implicita/esplicita operatori (i metodi op_Implicit e op_Explicit, che si sarebbe parimenti invocate)

Questi sono ogni FAI si spiega da sé se sai un po 'di riflessione, ma potrei elaborare se qualcuno si rivelasse difficile.

+0

Aggiornato la mia risposta per indirizzare gli altri metodi di conversione citati. –

0

È implica quelli sono tutti uguali
Non sono
Scegli il appropriata

Convert Classe

Converte un tipo di dati di base a un altro tipo di dati di base.

Parse è da stringa

ToString è una stringa

IConvertible interfaccia

Definisce metodi che convertono il valore del riferimento o desunto che attua un runtime linguaggio comune digitare che ha un valore equivalente .

TypeConverter Classe

Fornisce un modo unificato di convertire tipi di valori ad altri tipi, così come per l'accesso ai valori standard e sottoproprietà.

Sì, è necessario conoscere il tipo di conversione.
E dovresti sapere se il tipo da cui stai convertendo.

Con i generici non è integrato.
Nella migliore delle ipotesi si fornisce un metodo.
Ma perché è necessario convertire i generici?

Sembri implicare che più di un modo è una brutta cosa.
Per una sola via, mi piace la risposta di Tim S. +1
Ma questo non significa che lo userei mai.

Ci sono ancora più modi per ottenere dati da un database SQL.
E 'una cosa brutta?

+0

Dove dico questo? –

Problemi correlati