C# Generics: Могу ли я объединить перегруженные методы в один с различными типами данных возврата / ввода?
У меня есть 4 статических вспомогательных метода, которые я хочу объединить в один, если это возможно. Каждый метод идентичен за исключением типа данных входного параметра и установки значения в типах ReturnDto и ReturnDto. Я довольно новичок в Generics, но даже не уверен, выполнимо ли это в плане эффективности, кроме наличия 4 строго типизированных методов.
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 ответ
Да:
private static ReturnDto<T> MethodName<T>(T val)
Если вы замените T
( параметр общего типа) с любым конкретным типом вы получите метод, который вы ожидаете. Думать о T
в качестве заполнителя для любого типа. Если не любой тип является допустимым, вы можете ограничить его для соблюдения определенных правил; Прочитайте это для получения дополнительной информации.
Также стоит отметить, что вывод типа позволяет вам вызывать этот метод, фактически не указывая универсальный тип:
var returnDto = MethodName(1); //instead of MethodName<int>(1)
T
выводится через тип val
который int
; у компилятора достаточно информации, чтобы выяснить тип T
с вами нужно явно заявить об этом.