C # Ist es möglich, einen Typ in eine Methode zu übergeben und die Methode ein Objekt dieses Typs zurückgeben zu lassen?

7

Das scheint so zu sein, als wäre es möglich.

%Vor%     
jim 15.01.2010, 13:14
quelle

7 Antworten

8

In Ihrem gegebenen Beispiel sind Sie wahrscheinlich besser bedient, wenn Sie Folgendes tun:

%Vor%

Um jedoch Ihre Frage zu beantworten - ja, die Antwort ist die Verwendung von Generika:

%Vor%

Bei dieser Methode ist T ein -Typ-Parameter . Sie können T in Ihrem Code genauso verwenden wie jeden anderen Typ (zum Beispiel eine Zeichenkette). Beachten Sie jedoch, dass wir in diesem Fall keine Einschränkung für T festgelegt haben, sondern nur für Objekte vom Typ T Habe die Eigenschaften und Methoden der Basis object ( GetType() , ToString() etc ...)

Wir müssen natürlich erklären, was T ist, bevor wir es benutzen können - zum Beispiel:

%Vor%

Weitere Informationen finden Sie in der MSDN-Dokumentation zu Generics

    
Justin 15.01.2010, 13:25
quelle
5

Dies scheint so, als wäre es besser inline gemacht.

Was Sie tun können, ist etwas wie:

%Vor%

Wenn Sie so etwas deklarieren, erhalten Sie keine Null-Referenz-Ausnahme. Dann kannst du einfach ein einfaches

machen %Vor%     
MunkiPhD 15.01.2010 13:15
quelle
3

Verwenden Sie Generika:

%Vor%     
anonymous coward 15.01.2010 13:17
quelle
1

Sie können die Methode wie folgt definieren:

%Vor%

Alternativ können Sie, wenn Sie nicht garantieren können, dass TReturnType ein Referenztyp ist, die generische Integritätsregel (TReturnType: class) verlassen und den Standardwert (TReturnType) anstelle von null zurückgeben - dies würde den Standardtyp von TReturnType zurückgeben, der 0 wäre für einen int ...

    
saret 15.01.2010 13:19
quelle
1

Wenn Sie den Typ zum Zeitpunkt der Kompilierung kennen (wenn Sie den Code schreiben), können Sie Generika verwenden.

Wenn Sie den Typ nur zur Laufzeit (über Type) kennen, können Sie den Activator Klasse.

    
GvS 15.01.2010 13:22
quelle
1

Eine solche Konvertierung kann mit as

durchgeführt werden %Vor%

Wenn Sie diesen Ausdruck in eine Methode einpacken, kaufen Sie nichts wirklich

    
mfeingold 15.01.2010 13:22
quelle
1

Ich denke, dass Sie tatsächlich nach einem Convert.ChangeType-Mechanismus suchen.

%Vor%     
Chris Marisic 15.01.2010 13:28
quelle

Tags und Links