Hallo zusammen,
ich habe mir eine Klasse gebaut, mit der ich strings in so ziemlich jeden Datentyp umwandeln kann, den ich möchte.
So weit so gut.
Die Hauptmethode wird so aufgerufen. StringConverter.ConvertTo<T>(string).
Jetzt ist mir beim Benutzen aufgefallen, dass der Aufruf relativ schwer zu lesen ist. Gerade weil ich den halt oft hintereinander benutze. Also in mehreren Zeilen, wenn ich mal wieder einen String zerlege und die Bestandteile in die entsprechenen Properties packe.
Da hab ich mir gedacht, ich mache für häufige Datentype spezielle Methoden.
Zum Beispiel StringConverter.ToInt(string).
Wäre das eigentlich zu viel des Guten und fallen euch andere Lösungen ein?
Viele Grüße.
Kannst du die BCL Methoden (z. B. Int32.TryParse Method (System) | Microsoft Docs) nicht dafür verwenden?
Klar kann ich die verwenden und mache ich auch im Hintergrund. Meine Klasse macht das ganze ein wenig praktischer, da ich ein einheitliches Interface habe.
Was ich nicht geschrieben habe ist, dass man den Typen auch als Parameter übergeben kann und nicht unbedingt als generic type parameter angeben muss.
Es gibt also auch eine StringConverter.ConvertTo(type,string). Das ist auch der ursprüngliche Grund für die Klasse, da ich damit über Reflection Datenklassen aus Dateien heraus befüllen kann. Vornehmlich gehts dabei um Grenzwerte die in Konfigdateien stehen.
Da ich dann die Klasse nun mal schon hatte, habe ich sie ein wenig erweitert und nutze sie nun als allgemeine Konverterklasse.
Eigentlich kannst du auch auf die Convert Klasse aufbauen.
Diese bietet dir übrigens genau solche Methoden.
Dort werden bei falschen Formaten aber auch Exceptions geworfen.
Ansonsten kannst du, wie von dannoe empfohlen, auch gegen die Methpden der jeweiligen DAtentypen arbeiten.
I.d.R. haben diese eine Parse/TryParse Methode.
Dabei kannst du in TryParse an dem Rückgabewert erkennen ob die Konvertierung funktioniert hat.
Im Endeffekt erfindest du hier das Rad neu, was aber unnötig ist.
Nachtrag:
Deine Antwort kam leider vor meiner.
Also ist deine StringConvert Klasse nur ein Wrapper um die bestehenden Klassen und Methoden.
Ist zwar ganz nett, aber kann u.U. auch Fehler verschleiern.
Wenn deine Konvertierung scheitert, was bekommst du dann für einen Wert oder wirfst du auch nur eine Exception?
Dann hätte deine Klasse keinen direkten Mehrwert als die Convert Klasse.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Mein Klasse kann schon ein wenig mehr.
Sie kann auch Enums(Flags), Point(f), Size(f) und so weiter konvertieren. Den Vorteil habe ich oben schon beschrieben, dass ich mit Reflection den Zieldatentyp "auslesen" kann und dann entsprechend Konvertieren.
Grüße,
Am Ende, wenn es nur für dich bestimmt ist, musst du entscheiden was sinnvoll ist und was nicht.
Von der Beschreibung her, baust du ziemlich viel bereits vorhandene Funktionalität des Frameworks einfach nach. Ob das so gut ist, wage ich zu bezweifeln.
Aber ohne genaue Kenntnis, warum du genau den Weg gehst kann man dir auch schwer Empfehlungen geben.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Hallo panicJonny
Da hab ich mir gedacht, ich mache für häufige Datentype spezielle Methoden.
Zum Beispiel StringConverter.ToInt(string).
Wäre das eigentlich zu viel des Guten und fallen euch andere Lösungen ein?
Das kannst du schon so machen. Das ist für die BasisTypen ja eine nette Verbesserung der Lesbarkeit.
Du könntest das auch noch als Extension-Method anbieten:
var result = "123".ToInt();
Gruß
Alf