Wie komme ich von einem Typ der TryParse-Methode?
Meinem speziellen problem:
Ich habe einen string, der angibt, einer beliebigen Art in eine configuration-Klasse
Config.numberType = "System.Foo";
wo Foo
ist ein Typ wie Decimal
oder Double
Benutze ich Type.GetType(Config.numberType)
zur Rückgabe des entsprechenden Typs.
Wie bekomme ich von dieser Art benutzen zu können, System.Foo.TryParse()
?
Einige weitere Verwandte Abfragen
TryParse()
aus zugegriffen werden kannSystem.Foo.TryParse()
sowiefoo.TryParse()
. Bedeutet das, dassfoo
ist eine Art von Klasse in C#? Dies scheint seltsam für mich, dassint
,double
etc sind eigentlich nicht nur modifier-keywords.- Wie kann man Variablen deklarieren, unter diesen Umständen? -
var
ist nicht universell einsetzbar, es scheint also nur im lokalen Bereich etc.
var
ist derzeit nur im Rahmen einer Methode. siehe stackoverflow.com/q/4461597/1086351 für details
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie viele gesagt haben - es ist nicht eine direkte route. Ich erwarte eine option schließen ist
TypeConverter
:Natürlich, müssen Sie möglicherweise
try
/catch
behandeln von Ausnahmen. So ist das Leben.Benötigen Sie Reflexion zu suchen und dann rufen Sie die statische
TryParse()
Methode. Nicht alle Typen implementieren Sie diese Methode, so müssen Sie entscheiden, wie es zu handhaben, wenn es fehlt. Sie können auchSystem.Konvertieren
zur Konvertierung einer Zeichenfolge in einem beliebigen Typs, vorausgesetzt, die Schnur ist eigentlich eine gültige Darstellung einen Wert für diesen Typ und es sich um eine Konvertierung implementiert für Sie.int
,double
usw. sind Aliase fürSystem.Int32
,System.Double
usw. - Sie sind Teil der Sprache C#, das wäre unangenehm verbose ohne Sie.Ohne zu wissen, den Typ zur compile-Zeit, werden Sie gezwungen, zu erklären und mit Ihren Daten arbeiten, wie
object
/System.Object
. C# 4.0 einführen, die tatsächliche dynamische Typen, die kümmern sich um einige der mühsamen Reflexion, die für Sie arbeiten, aber für jetzt sind Sie stecken, tun Sie es von hand. Beachten Sie, dass wenn Sie verwenden SieSystem.Konvertieren
in einer Methode mit einem parametrisierten Typ-argument und zurück, oderTryParse()
mit einer Technik wie in Verbindung mit von Sebastian Sedlak, können Sie leicht erreichen die Fähigkeit zu schreiben, client-code, arbeiten mit statischen Typen... So lange, wie Sie passen oder umgewandelt werden können, um von den Typen, die Sie sind Parsen.dynamic
gilt für Instanzen.dynamic
wird wenig tun, um zu helfen, mit seinem ersten problem. Der code von Sebastian verknüpft sieht aus wie eine anständige Art und Weise zu erreichen, dass.BEARBEITET: ich entfernte die generische Implementierung und bereinigt diese Antwort passt besser zu der ursprünglich gestellten Aufgabe.
HINWEIS: Die Antwort von Marc Gravell ist wohl die prägnanteste, wenn Sie nur wollen, dass der Analysierte Wert angesichts der Art. Die Antwort unten zeigt Ihnen, wie man an der Methode (D. H., die MethodInfo-Objekt, und wie Sie es aufrufen).
Folgende sollte funktionieren, zumindest für die Arten, die zur Umsetzung von public static bool TryParse(string, T-Wert):
Verwenden Sie die folgenden test-code:
Und verwenden Sie diese in Ihrem Fall:
Über die Verwendung von var: möglicherweise haben Sie eine falsche Vorstellung von dem, was var bedeutet: Es ist keine "Variante" Typ (Typ-Objekt bereits verwendet wird, für dass), sondern verschiebt die Erklärung der syntax für die Art der Zuordnung der rechten Seite. Die folgenden Deklarationen sind gleichwertig:
Die primäre Verwendung von var erlaubt zu erstellen anonyme Typen:
Und anderen guter link zu diesem problem. Der source-code, die Website ist sehr schlecht formatiert, so dass ich geputtet es hier. Hoffentlich wird der Autor nicht mich verklagen.
kann dies helfen: http://theengineroom.provoke.co.nz/archive/2007/04/27/generic-tryparse-type-conversion.aspx