Рассмотрят следующие методы:с методом # находкой перегрузка от общего типа во время выполнения
public void foo(int a) {
//do something with a
}
public void foo(ushort a) {
//do something with a
}
public void foo<T>(Nullable<T> a) where T : struct {
if (!a.HasValue) {
return;
}
foo(a.Value); //find appropriate method based on type of a?
}
Есть ли способ, чтобы найти соответствующий метод для вызова на основе общего типа параметра? Например, если (T) a является int, вызовите первый метод, если это укорт, вызовите второй. Если такой метод не существует, возможно, выведите исключение во время выполнения.
Я попытался следующие:
public void foo<T>(Nullable<T> a) where T : struct {
if (!a.HasValue) {
return;
}
switch(a.Value.GetType()) {
case typeof(int): foo((int)a.Value); break;
case typeof(ushort): foo((ushort)a.Value); break;
//and so on
}
}
Но компилятор не любит актеров («Не удается преобразовать тип T в целое»); Есть ли способ достичь того, что я пытаюсь сделать?
Сначала вы можете использовать 'object', как в:' (int) (object) a.Value'. –
Кастинг для объекта также работает. Я предпочитаю решение dcastro, так как мне даже не нужно использовать оператор switch и вручную проверять каждый тип. –