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 с вами нужно явно заявить об этом.

Другие вопросы по тегам