2017-09-28 4 views
1

J'ai 4 méthodes auxiliaires statiques que je veux combiner en un si possible. Chaque méthode est identique au type de données du paramètre d'entrée et définit une valeur dans les types ReturnDto et ReturnDto. Je suis assez nouveau pour les génériques, mais je ne sais même pas si cela est faisable dans une matière efficace autre que d'avoir 4 méthodes fortement typées.C# Génériques: Puis-je combiner des méthodes surchargées en une avec différents types de données de retour/entrée?

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

que sont val2 et val3 dans votre exemple? – Chris

Répondre

6

Oui:

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

Si vous remplacez T (generic type parameter) avec tout type spécifique que vous obtiendrez la méthode que vous attendez. Pensez à T comme espace réservé pour n'importe quel type. Si ce n'est pas un type est valide alors vous pouvez le contraindre à respecter certaines règles; lisez this pour plus d'informations.

A noter également, est que l'inférence de type vous permet d'appeler cette méthode sans avoir à indiquer le type générique:

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

T est inféré par le type de val qui est int; le compilateur a assez d'informations pour comprendre le type de T avec vous ayant besoin de l'indiquer explicitement.

+0

Vous devez également noter qu'en fournissant un type spécifique en tant que paramètre, vous n'avez pas besoin de spécifier le type générique lors de l'appel. – krillgar

+0

@krillgar bon point. – InBetween