2016-07-06 6 views
0

Ich brauche eine Template-Funktion aufrufen, so etwas wie:Aufruf zur Vorlage Funktion Zeichenfolge des Typs mit

void myFunc<T>(); 

Ich habe den Vorlagentyp als String und ich möchte die Funktion aufrufen, die Art unter Verwendung Ich habe als Zeichenfolge. Zum Beispiel, wenn ich will es für den Ausnahmetyp nennen, statt Aufruf:

myFunc<Exception>() 

ich brauche es zu tun:

string type = "Exception"; 
myFunc<type>(); 

(ich brauche, um ein Objekt aus json Zeichenfolge zu analysieren, und ich bekomme den Typ des Objekts als String)

Gibt es eine Möglichkeit, so etwas zu tun.

Dank

Antwort

0

Die Gattung Compilertyp bekannt sein muss, um eine generische Methode die klassische Art und Weise zu nennen.

Ohne Reflexion müssen Sie implizit den Typ myFunc<string>() angeben.

Mit Reflection können Sie jedoch den Typ zur Laufzeit angeben. Betrachten Sie das folgende Beispiel:

class Program 
{ 
    static void Main(string[] args) 
    { 
     string xyz = "abc"; 

     BindingFlags methodflags = BindingFlags.Static | BindingFlags.Public; 

     MethodInfo mi = typeof(Program).GetMethod("MyFunc", methodflags); 

     mi.MakeGenericMethod(xyz.GetType()).Invoke(null, null); 
    } 

    public static void MyFunc<T>() 
    { 
     Console.WriteLine(typeof(T).FullName); 
    } 
} 

MyFunc druckt System.String

+0

Danke, aber ich glaube, Sie nicht meine Frage verstehen. Ich bearbeite es, um klarer zu sein. – amichai

+0

@amichai Nun, Sie können das nur mit Reflektion tun. Überprüfen Sie meine bearbeitete Antwort. – user3185569

+0

Danke, ich glaube, dass Sie Typ.GetType (xyz) anstelle von xyz.GetType() schreiben wollten, – amichai

Verwandte Themen