Frage zur Konvertierung int > string

12/07/2009 - 11:21 von Hartmut Callies | Report spam
Hallo,
ich habe einer Klasse eine Eigenschaft gegeben:

private string platz = string.Empty;

public int SetPlatz {
set {platz = value.ToString();}
}

Aus der Datenbank wird ein Integer-Wert an die Klasse
übergeben, um die Platznummer nur in einer Anzeige zu verwenden,
d.h. keine weitere Verarbeitung. Deshalb gleich die Konvertierung in
einen String.

Mich interessiert, warum die folgende Zeile keine
Konvertierung zulàßt und den Fehler (Cannot convert type 'int' to 'string')
verursacht:
platz = (string)value;

Eine andere Möglichkeit die funktioniert ist: platz =
Convert.ToString(value);
Ist convert.ToString() das gleiche wie value.ToString()?


Hartmut Callies
 

Lesen sie die antworten

#1 Marvin Massih
12/07/2009 - 11:44 | Warnen spam
Hallo Hartmut,

Hartmut Callies schrieb:
ich habe einer Klasse eine Eigenschaft gegeben:

private string platz = string.Empty;

public int SetPlatz {
set {platz = value.ToString();}
}



Die Eigenschaft sollte "Platz" und nicht "SetPlatz" heißen (außer, es
handelt sich um den Platz eines Sets, dann sollte die Variable aber auch
"setPlatz" heißen).
Die Initialisierung auf string.Empty ist höchstwahrscheinlich auch
überflüssig.

Aus der Datenbank wird ein Integer-Wert an die Klasse
übergeben, um die Platznummer nur in einer Anzeige zu verwenden,
d.h. keine weitere Verarbeitung. Deshalb gleich die Konvertierung in
einen String.



Das ist böse. Die GUI sollte selbstverstàndlich auch int-Felder anzeigen
können.

Mich interessiert, warum die folgende Zeile keine
Konvertierung zulàßt und den Fehler (Cannot convert type 'int' to 'string')
verursacht:
platz = (string)value;



Ein Cast bedeutet, dass das, was rechts davon steht, auch das "ist",
worin es gecastet werden soll.
Eine Zahl ist aber kein String, was man schon daran erkennt, dass ein
String sich als Kette von Zahlencodes (je nach Zeichenkodierung)
zusammensetzt, der Zeichencode der Ziffer "4" z.B. aber eben nicht "4" ist.

So etwas geht also:

string s = "Hallo Welt";
object sVersteckt = s;
string sCast = (string)sVersteckt;

Außerdem kannst du noch Zahlen ineinander casten (wobei ggf.
Nachkommazahlen abgeschnitten werden), weil Zahlen Zahlen sind.

So etwas geht also auch:

decimal d = 49.456m;
int i = (int)d; // Nachkommastellen werden abgeschnitten

Eine andere Möglichkeit die funktioniert ist: platz > Convert.ToString(value);
Ist convert.ToString() das gleiche wie value.ToString()?



Convert.ToString(value) dürfte intern value.ToString() aufrufen, ist
also auf jeden Fall àquivalent.
Ich würde aber immer .ToString() vorziehen; ich persönlich nutze aus der
Convert-Klasse nur die Methode ChangeType, wenn ich zur Laufzeit einen
Typ mal dynamisch konvertieren muss.

Gruß
Marvin

Ähnliche fragen