2017-07-24 3 views
0

Ist möglich, Methode Rückgabetyp, wie Typ auf generische Klasse?Methode Rückgabetyp wie Generic Class Type

Ich habe Allgemeine Klasse:

class Generic<T> 
    { 
     public static DataSet test(T input) 
     { 
     //Some logic... 
     } 
    } 

Eine andere Klasse, wo ich meine generische Klasse nennen.

Es funktioniert für diese Beispiele:

Generic<int>.test(10); 

Aber wenn ich verschiedene Methoden nennen wollen, mit komplexen unbekannten Datum Typen, ich weiß nicht, wie ich wie Generic Art ihre Datumsart setzen.

Für Beispiel

var data = Data.GetData(); // return List<string,int> 
var data2 = Data.GetData2() // return Tuple<List<string>, List<int>> 

Ich versuche, verwenden Sie die Methode GetType, für die Rückkehr Methode Typ bekommen, so etwas wie dieses, aber es funktioniert nicht.

Generic<data.GetType()>.test(data); 

Ist es möglich, so etwas wie das?

+0

Was wird 'test' zu tun mit' T' Sie habe keine Einschränkungen und du verwendest es nicht für den Rückgabetyp. Warum nicht einfach die Klasse nicht generisch machen und nur 'dynamischen Test (Objekteingabe)' machen? –

+0

'test (T-Eingabe)' – Will

+0

Im letzten möchte ich diese Ergebnisliste, Tupel zu DataSet, ich hier nur dynamisch, aber ich möchte DataSet zurückgeben. – tomas

Antwort

2

Nein, Sie können den generischen Typ zur Laufzeit nicht ohne Reflektion angeben, aber es gibt möglicherweise andere Möglichkeiten, Ihr Problem zu lösen. Sie könnte setzen die generische Einschränkung für das Verfahren anstelle der Klasse:

class Generic 
{ 
    public static dynamic Test<T>(T input) 
    { 
    //Some logic... 
    } 
} 

die dann vom Eingangstyp abgeleitet werden:

Generic.Test(data); 
+0

Oh, das ist es. Ich bin neu in generischen Typen und ich dachte, dass ich eine generische Klasse haben muss, wenn ich mit generischen Methoden arbeiten möchte. Vielen Dank. – tomas

+0

@tomas Nein - nur wenn der generische Typ auf die gesamte Klasse angewendet werden soll. –

0

Rückgabetyp einer Funktion ist in der Kompilierzeit bekannt. Deshalb, wenn ich deine Frage richtig verstanden habe, was du verlangst, ist nicht möglich. TL; DR Sie können den Rückgabetyp nicht in Runtime festlegen.