Hallo,
ich möchte wie unten im Code-Snippet ersichtlich einem Konstruktor einen String übergeben, der zwei Zahlen enthält. Und dort sollen die beiden Zahlen dann einem anderen Konstruktor übergeben werden. Nur wenn ich das mach, dann bekomm ich Schwierigkeiten "this" zu setzen. Nun meine Frage, gibt es da einen Trick oder muss ich hier eine statische Methode erfinden, die dann erst eine Instanz der Klasse erzeugt und zurückgibt? So z. B.:
Test tst = Test.CreateInstance("12,49");
Hier das Snippet:
public class Test
{
public Test(string str)
{
//Aufbau vom String: Zahl1,Zahl2
//Beispiel: 12,49
string[] strParts = str.Split(',');
Test tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
this = tst;
//oder
//this tst = new Test(int.Parse(strParts[0]), int.Parse(strParts[1]));
}
public Test(int int1, int int2)
{
//Rechne etwas
}
}
Danke schonmal für eure Hilfe!
Gruß
Bugrick
Hi Bugrick,
hier mal ein Beispiel aus der Doku, das ist wahrscheinlich das, wonach du suchst:
public Employee(int weeklySalary, int numberOfWeeks)
: this(weeklySalary * numberOfWeeks)
{
}
Christian
Weeks of programming can save you hours of planning
Das hier könnte Tatsächlich so funktionieren:
public Test(string str) : this(int.Parse(str.Split(',')[0]), int.Parse(str.Split(',')[1]))
{
}
Problem ist, dass ich noch sehr viel Logik habe, die ich aus dem String raus ziehe, beispielsweise falls ungültige Zeichen drin sind. Aber ich seh mir mal an wie sich das alles verhält und melde mich.
Danke für die schnelle Antwort schon mal.
Für mein Geschmack gehört keine Logik in einen Konstruktor.
Ich würde hier mit einer statischen Methode der Klasse arbeiten, die mir anhand des Strings das Objekt zurück gibt.
var myEmployee = Employee.CreateByXY( foo );
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
So werde ich es auch lösen, da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen. Danke!
Hallo Bugrick,
da ich keine Möglichkeit gefunden habe die ganze Logik sauber unterzukriegen
public Test(string str) : this(GetValue (str, 0), GetValue (str, 1))
mit einer privaten statischen Methode mit Namen GetValue o.ä.
herbivore
Hallo,
am einfachsten wäre es doch, die Logik von "Rechne etwas" in eine neue Methode RechneEtwas(int, int) auszulagern und aus beiden Konstruktoren aufzurufen.