2010-09-20 4 views
7

Ich habe ein paar verwandte Fragen zu diesem Thema gelesen, aber keiner von ihnen ergibt Sinn für mich. Wie ich es verstehe, können Sie in einigen Fällen syntaktisch mit cast und parse arbeiten und das gleiche Ergebnis erzielen.Cast gegen Parse

Gibt es einige allgemeine Richtlinien, die mir helfen können, zu entscheiden, wann ich einen Ansatz wählen soll?

+1

Casting und Parsing sind sehr unterschiedlich. Könntest du ein Beispiel zeigen, wo du denkst, dass sie ähnlich benutzt wurden? – Jens

+0

someString.ToString() vs (string) (someString) oder long.Parse (someCalculation) vs (long) (someCalculation) – Kory

Antwort

7

In der Regel verwenden Sie Parse() für eine Zeichenfolge, deren Wert einen gültigen Wert des Typs darstellt, in den Sie konvertieren.

Gießen, auf der anderen Seite, sind besser genutzt, wenn Sie ein Objekt eines abgeleiteten Typs, aber in einer Basisvariablen gespeichert, und müssen es als sein spezifischeren Typen verwenden.

Das heißt, wenn Sie "1234" haben, können Sie Parse() in ein int. Aber wenn Sie haben

object variable = 1234; 

Sie sollten es umwandeln, um es als int zurück zu bekommen.

3

Casting ist eher eine Umwandlung eines Objekts von einem ähnlichen Typ. Ein gutes Beispiel ist Float zu Integer oder Double zu Dezimal. Parsen ist genau das; Parsing. Die Definition oder Verwendung von Parsing ist etwas breiter. Sie könnten eine Parse-Methode in Ihr eigenes Objekt schreiben, ähnlich der von int.Parse oder int.TryParse, um eine Zeichenfolge in Ihren Objekttyp zu konvertieren. Das Parsen könnte sich auch auf Dinge wie die String-Manipulation beziehen, um die benötigten Daten von einer gegebenen Zeichenkette zu erhalten. "Parsen" bezieht sich nicht unbedingt auf "Casting".

Ein weiteres gutes Beispiel für Casting ist bei der Verwendung von Vererbung oder Schnittstellen.

public interface ICar { 
    // ... 
} 

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

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

Werfen Sie einen Blick here, bei Mark Gravell die umfassende Antwort (wird auch Sie über das Konvertieren beantworten ..).