String in generischen Typen umwandeln!?

13/10/2008 - 12:36 von Christian Leder | Report spam
Hallo

Also wir haben da eine Funktion, die uns zu einem "Key" immer einen String
zurück gibt.
Die Werte dieses Strings entsprechen in der Regel Integer;Datetime;Bool oder
einem wirklichem String.

Ich habe dieses Funktion jetzt so überladen / erweitert, dass man einen
Rückgabewert mit übergeben kann, der zurückgegeben wird, wenn die Funktion
keinen Wert findet.

Jetzt wollte ich das ganze halt gerne Generisch machen und das so, dass
der Wert den man als RetVal angibt, auch von der Funktion zurückgegeben wird.

Das ganze habe ich in soweit hinbekommen, dass es mit Verweistypen geht.

Weil das kann ich schreiben 'retun varXY as T'.

Nur das geht halt bei WerteTypen wie Int, bool etc nicht!!!
Da bràuchte ich jetzt eigentlich die in den Klassen implementierte Funktion
Parse.
Nur die ist leider in keiner Basisklasse und auch keiner Schnittstelle.

Deshalb bleibt das Grundlegende Problem, wie kann ich einen String in einen
<T> / Type umwandeln!?

FunktionsBeispiel:

public T LoadEinstellung<T>(string Key, T NotFoundRetValue)
{
//
string ret = "true";
return ret; // Fehler!
}


Danke euch schon jetzt.
LG
Christian
 

Lesen sie die antworten

#1 Markus Springweiler
13/10/2008 - 14:08 | Warnen spam
Christian,

Das ganze habe ich in soweit hinbekommen, dass es mit Verweistypen geht.
Weil das kann ich schreiben 'retun varXY as T'.



Das wird, so varXY wie im Beispiel ein String ist, allermeistens "null"
zurückgeben, da eigentlich nur XName einen implicit/explicit operator für
Strings bereitstellt.
Und da "as" null zurückgeben kann, macht es für Wertetypen keinen Sinn ->
harter Cast mit "(neuerTyp)variable", was jedoch aus einem String keinen
Int32 machen wird.

Nur das geht halt bei WerteTypen wie Int, bool etc nicht!!!
Da bràuchte ich jetzt eigentlich die in den Klassen implementierte Funktion
Parse.
Nur die ist leider in keiner Basisklasse und auch keiner Schnittstelle.



Du könntest via Reflection diejenige Methode in der Klasse System.Convert
heraussuchen, welche mit "To" anfàngt, deinen Inputwert-Typ als Parameter
hat, und deinen Typ T zurückgibt -- das Ergebnis dadavon (Object) kannst du
dann mittels hartem Cast "(T)convertResult" typisieren.

/\/\arkus.

Ähnliche fragen