2017-09-28 1 views
1

Ich habe 4 statische Hilfsmethoden, die ich nach Möglichkeit zu einem kombinieren möchte. Jede Methode ist identisch mit dem Eingabeparameter-Datentyp und legt einen Wert in ReturnDto und ReturnDto fest. Ich bin ziemlich neu bei Generics, aber nicht einmal sicher, ob dies in einer effizienten Angelegenheit machbar ist, außer 4 stark typisierten Methoden zu haben.C# Generika: Kann ich überladene Methoden zu einem mit verschiedenen Rückgabe-/Eingabedatentypen kombinieren?

private static ReturnDto<int> MethodName(int val) 
private static ReturnDto<string> MethodName(string val) 
private static ReturnDto<bool> MethodName(bool val) 
private static ReturnDto<DateTime> MethodName(DateTime val) 
{ 
    //do some stuff here... 
    return new ReturnDto<DateTime> { Val = val, Val2 = val2, Val3 = val3 }; 
} 
+1

Was sind val2 und val3 in Ihrem Beispiel? – Chris

Antwort

6

Ja:

private static ReturnDto<T> MethodName<T>(T val) 

Wenn Sie ersetzen T (generic type parameter) mit einem bestimmten Typ Sie die Methode bekommen Sie erwarten. Denken Sie an T als Platzhalter für einen beliebigen Typ. Wenn nicht irgendein Typ ist gültig dann können Sie es einschränken, bestimmte Regeln einzuhalten; lesen Sie this für weitere Informationen.

Auch erwähnenswert ist, dass Typinferenz können Sie diese Methode aufrufen, ohne tatsächlich die generische Art zu erklären, mit: wird

var returnDto = MethodName(1); //instead of MethodName<int>(1) 

T durch die Art der val abgeleitet, die int ist; Der Compiler verfügt über genügend Informationen, um den Typ T herauszufinden, den Sie explizit angeben müssen.

+0

Sie sollten auch beachten, dass Sie bei Angabe eines bestimmten Typs als Parameter den generischen Typ nicht angeben müssen, wenn Sie ihn aufrufen. – krillgar

+0

@ Krillgar guter Punkt. – InBetween

Verwandte Themen