Domanda

In .Net puoi leggere un valore stringa in un altro tipo di dati utilizzando entrambi <datatype>.parse O Convert.To<DataType>.

Non ho familiarità con i fondamenti dell'analisi rispetto alla conversione, quindi sono sempre perplesso quando mi viene chiesto quale sia migliore/più veloce/più appropriato.

Quindi, qual è il modo migliore in quale tipo di circostanze?

È stato utile?

Soluzione

IL Convert.ToXXX() i metodi sono per oggetti che potrebbero essere del tipo corretto o simile, mentre .Parse() E .TryParse() sono specifici per le stringhe:

//o is actually a boxed int
object o = 12345;

//unboxes it
int castVal = (int) 12345;

//o is a boxed enum
object o = MyEnum.ValueA;

//this will get the underlying int of ValueA
int convVal = Convert.ToInt32( o );

//now we have a string
string s = "12345";

//this will throw an exception if s can't be parsed
int parseVal = int.Parse( s );

//alternatively:
int tryVal;
if( int.TryParse( s, out tryVal ) ) {
    //do something with tryVal 
}

Se compili con flag di ottimizzazione, TryParse è molto veloce: è il modo migliore per ottenere un numero da una stringa.Tuttavia, se hai un oggetto che potrebbe essere un int o una stringa, Convert.ToInt32 è più veloce.

Altri suggerimenti

Ecco una risposta per te:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

Anche se penso che nelle versioni moderne di .NET, la cosa migliore da fare è in ogni caso utilizzare TryParse, se c'è qualche dubbio che la conversione funzionerà.

Sono un grande fan di ProvaParse, poiché ti risparmia un sacco di mal di testa legati agli errori quando c'è la possibilità che il valore che stai per analizzare non sia del tipo appropriato.

Il mio ordine è solitamente:

  • Analizza (se posso essere sicuro che il valore sarà del tipo giusto e cerco di garantirlo)
  • TryParse (se non posso esserne sicuro, cosa che accade ogni volta che è coinvolto l'input dell'utente o l'input da un sistema che non puoi controllare)
  • Convert (che penso di non usare da quando ho iniziato a usare Parse e TryParse, ma potrei sbagliarmi)

Esiste anche il metodo DirectCast che dovresti usare solo se sei sicuro di quale sia il tipo dell'oggetto.È più veloce, ma non esegue alcun controllo adeguato.Utilizzo DirectCast quando estraggo valori da un DataTable tipizzato in modo approssimativo quando conosco il tipo per ciascuna colonna.

Se hai bisogno di velocità, sono abbastanza sicuro che un cast diretto sia il modo più veloce.Detto questo, normalmente utilizzo .Parse o .TryParse perché sembra rendere le cose più facili da leggere e comportarsi in modo più prevedibile.

Credo che Convert in realtà chiami Parse sotto il cofano.Quindi c'è poca differenza lì, e sembra davvero solo una questione di gusti personali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top