Überschreiben von ToString

arrayhunter

Mitglied
hallo
folgendes in meiner Klasse
Code:
class Adresse
{
	// Private Members
	private int nummer;
	private string name;
	private string nachname;
	private string wohnort;
	
	
	// Properties
	public int Nummer
	{
		get { return nummer;}
		set { nummer = value;}
	}
	public string Name
	{
		get { return name;}
		set { name = value;}
	}
	public string Nachname
	{
		get { return nachname;}
		set { nachname = value;}
	}
	public string Wohnort
	{
		get { return wohnort;}
		set { wohnort = value;}
	}
	
	// Konstruktor
	public Adresse()
	{
		this.name 		= "Horst";
		this.nachname 	= "Meier";
		this.wohnort 	= "Cottbus";
	}
	
	
public override string ToString()
{
	return string.Format("{0}\n{1}\n\n{2} {3}",name,nachname,wohnort);
	
}
}

jetzt erzeuge ich in meiner Main folgendes Konstrukt:
Code:
Adresse myAdr = new Adresse();
Console.WriteLine(myAdr.ToString());

und mir wird eine FormatException in der Main beim ToString geworfen.
wie muss es denn richtig heissen
 
Hallo arrayhunter!

Ein "ToString" deiner Klasse sollte Dir nur den Typnamen wieder geben.
Du musst also die ToString-Methode überschreiben.
Code:
public override string ToString() {
    // return base.ToString (); (Statndart-Methode wird überschrieben)
    return string.Format( "{0} ({1}, {2}, {3})", nummer, name, nachname, wohnort);
}

//EDIT: Ich würde Dir empfehlen ein Struct zu verwenden und dem Konstuktor des Struct's alle Werte zu übergeben.

MfG, cosmo
 
Zuletzt bearbeitet:
danke dir,

hab es jetzt so erledigt:
Code:
public override String ToString()
{
	return (this.nachname.ToString() +"-"+this.name.ToString() + " wohnt in "+ this.wohnort.ToString());
	
}
// In der Main()
Code:
Adresse myAdr = new Adresse();	
	Console.WriteLine(myAdr);
 
Ok, aber gewöhn Dir bitte das Boxing an.
Erstens ist es schneller und zweitens ist es überschaubarer was verkettet wird. ;)
Ein ToString bei String's ist nicht notwendig.
Code:
public override String ToString(){
	return string.Format( "{0}-{1}  wohnt in {2}", this.nachname, this.name, this.wohnort );
}
Schönes WE, cosmo
 
moin

Ich kann Cosmo nur Recht geben! ;-)
Allerdings ist bei keinem Datentyp ein ToString notwendig, wenn du mit +-Operatoren um Strings zu verketten arbeitest.

Aber um auf das eigentliche Problem zurück zu kommen: soweit ich das sehen kann, fehlt dir einfach ein Parameter in der Format-Methode....du hast 4 Platzhalter definiert, aber nur 3 belegt...ergo, es fehlt einer.

Schönes Wochenende!

mfg broetchen
 
cosmochaosmaker hat gesagt.:
Ok, aber gewöhn Dir bitte das Boxing an.
Erstens ist es schneller und zweitens ist es überschaubarer was verkettet wird. ;)
Ein ToString bei String's ist nicht notwendig.
Code:
public override String ToString(){
	return string.Format( "{0}-{1}  wohnt in {2}", this.nachname, this.name, this.wohnort );
}
Schönes WE, cosmo

Moment .. nicht so hurtig ... Boxing ist nicht immer angebracht .. lass die beiden Varianten ca. 100.000 durchlaufen und du wirst sehen, dass deine Variante um mehr als die Hälfte langsamer ist.

Testen kannst du das auch mit diversen Profiling-Tools. Mit solchen Aussagen würde ich also wirklich aufpassen bzw. würde ich mir genau angucken, was beim Boxing im Hintergrund passiert.
 
Guten Montag Morgen!

@broetchen: Versteh ich jetzt nicht :confused:
Code:
{0}-{1}  wohnt in {2}", this.nachname, this.name, this.wohnort
=
{0} = this.nachname;
{1} = this.name;
{2} = this.wohnort;

@Norbert Eder:

Hallo Norbert!
Wenn ich mir dessen nicht so sicher gewesen währe, hätt ich es nicht gepostet. Ich hab das irgend wann mal gelesen als ich auf C# umgestiegen bin. Wo, weiss ich nicht mehr.
Muss wohl
Code:
nonsens
gewesen sein.
http://www.microsoft.com/germany/msdn/library/net/SchreibenVonLeistungsstarkenVerwaltetenAnwendungenEinLeitfaden.mspx hat gesagt.:
Dies ist ein kostspieliger Vorgang, der das durch den Einsatz von Werttypen gewonnene Leistungsplus wieder reduzieren oder völlig zunichte machen kann.
Du hast aber wie immer recht gehabt. :)

MfG, cosmo
 
broetchen hat gesagt.:
moin

Ich kann Cosmo nur Recht geben! ;-)
Allerdings ist bei keinem Datentyp ein ToString notwendig, wenn du mit +-Operatoren um Strings zu verketten arbeitest.

wenn ihr sagt, dass Boxing schneller ist, dann werde ich es ab jetzt benutzen :)
Aber um auf das eigentliche Problem zurück zu kommen: soweit ich das sehen kann, fehlt dir einfach ein Parameter in der Format-Methode....du hast 4 Platzhalter definiert, aber nur 3 belegt...ergo, es fehlt einer.
mfg broetchen

ja, das hab ich weggelassen, in meiner Klasse ist es richtig
 
arrayhunter hat gesagt.:
wenn ihr sagt, dass Boxing schneller ist, dann werde ich es ab jetzt benutzen
Mach das bitte nicht immer so. Du muss mich im 7. Post falsch verstanden haben.

Du kannst es verwenden wenn es um einfache Ausgaben geht. Sofern Du aber einen Prozess hast, der eine erhebliche Datanmenge schnell von a nach b umformatiert, ist es nicht angebracht.
MSDN hat gesagt.:
Dies ist ein kostspieliger Vorgang, der das durch den Einsatz von Werttypen gewonnene Leistungsplus wieder reduzieren oder völlig zunichte machen kann.
MfG, cosmo
 

Neue Beiträge

Zurück