2010-09-20 13 views
7

Ho letto alcune domande relative a questo argomento, ma nessuna di esse ha senso per me. A quanto ho capito, in alcuni casi è possibile utilizzare il cast e analizzare in modo interscambiabile e ottenere lo stesso risultato.Cast contro parse

Esistono alcune linee guida generali che possono aiutarmi a decidere quando scegliere un approccio rispetto all'altro?

+1

Il casting e l'analisi sono molto diversi. Potresti mostrare un esempio di dove pensi che siano stati usati in modo simile? – Jens

+0

someString.ToString() vs (stringa) (someString) o long.Parse (someCalculation) vs (long) (someCalculation) – Kory

risposta

7

Generalmente si utilizza Parse() su una stringa il cui valore rappresenta un valore valido del tipo a cui si sta convertendo.

La trasmissione, d'altra parte, è meglio utilizzata quando si dispone di un oggetto di un tipo derivato ma memorizzato in una variabile di base e deve essere utilizzato come tipo più specifico.

Cioè, se si dispone di "1234" è possibile Analizzare() in un int. Ma se hai

object variable = 1234; 

Dovresti lanciarlo per riprenderlo come int.

3

La trasmissione è più una conversione di un oggetto di un tipo simile. Un buon esempio è float to integer o double to decimal. L'analisi è solo questo; parsing. La definizione o l'uso del parsing è un po 'più ampio. È possibile scrivere un metodo Parse nel proprio oggetto simile a quello di int.Parse o int.TryParse per convertire una stringa nel tipo di oggetto. L'analisi può anche fare riferimento a cose come la manipolazione delle stringhe per raccogliere i dati necessari da una determinata stringa. "Parsing" non si riferisce necessariamente a "Casting".

Un altro buon esempio di trasmissione è quando si utilizza l'ereditarietà o le interfacce.

public interface ICar { 
    // ... 
} 

public class Corvette : ICar { 
    // ... 
} 

public void Foo() { 
    Corvette mycar = new Corvette(); 
    // Now do a cast 
    ICar = (ICar)mycar; 
} 
3

Date un'occhiata here, in risposta esauriente di Mark Gravell (ti risponderà sulla conversione di troppo ..).