Ich schreibe einen einfachen Proof of Concept für was im Wesentlichen ein Parser-Generator sein sollte.Können Sie eine Funktion zurückgeben, die auf einem generischen Typ basiert?
Grundsätzlich suche ich nach einer Möglichkeit, dass ich eine Funktion schreiben können, eine Funktion, die aus einem String konvertiert auf ein Objekt eines bestimmten Typs zurück - Ich möchte im Wesentlichen folgende Aufgaben zu:
Func<string, double> ConvertToDouble = BuildConverter(typeof(0.0));
Offensichtlich ist dies ein ziemlich konstruiertes Beispiel - aber wenn ich die einfache Version machen kann, dann sollte ich in der Lage sein, die kompliziertere Version zu machen!
FWIW, was ich letztendlich versuche zu tun ist eine Reihe von Werten auf eine Klasse abzubilden, aber um es so flexibel wie möglich zu machen, möchte ich es tun, indem ich eine Funktion habe, die eine Funktion zurückgibt die Umwandlung. Funktional denke, ich ich etwas, das wie folgt aussieht:
a -> (string -> a)
Als ersten Versuch, ich habe versucht das zu tun:
public static Func<string, T> BuildParser<T>(T t)
{
if (t is String)
return new Func<string, T>(x => x.ToString());
if (t is double)
return new Func<string, T>(x => double.Parse(x));
}
Welche überhaupt nicht funktionieren, aber es Ich fühle mich ein wenig fest, was für eine Herangehensweise ich wählen sollte - also würde jede Hilfe sehr geschätzt werden!
Sie scheinen den Punkt von Generika zu fehlen, wenn Sie für _types_ in Ihrer generische Funktion suchen. – Oded
Wenn Sie Laufzeitentscheidungen möchten, sollten Sie keine Generika verwenden. Wenn Sie Entscheidungen zur Kompilierungszeit treffen möchten, sollten Sie nicht "ist" verwenden. –
@Oded - Ich bin mir nicht sicher, ob ich dem zustimme, ich suche nur nach einer bestimmten Art von Typ-Polymorphie. – MrBear