Laden...

API zu einer Klasse, Grundschwatzfrage

Erstellt von panicJonny vor 3 Jahren Letzter Beitrag vor 3 Jahren 406 Views
P
panicJonny Themenstarter:in
64 Beiträge seit 2011
vor 3 Jahren
API zu einer Klasse, Grundschwatzfrage

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.

D
261 Beiträge seit 2015
vor 3 Jahren

Kannst du die BCL Methoden (z. B. Int32.TryParse Method (System) | Microsoft Docs) nicht dafür verwenden?

P
panicJonny Themenstarter:in
64 Beiträge seit 2011
vor 3 Jahren

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.

T
2.219 Beiträge seit 2008
vor 3 Jahren

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.

P
panicJonny Themenstarter:in
64 Beiträge seit 2011
vor 3 Jahren

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,

2.298 Beiträge seit 2010
vor 3 Jahren

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 |

A
764 Beiträge seit 2007
vor 3 Jahren

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