C #: método genérico não chama sobrecarga de método específico

Estou tentando criar um método genérico em C #, que chamará métodos diferentes com base no tipo de dados argumento em seu corpo e processará seu resultado posteriormente. Estou tentando conseguir isso criando um método genérico de invólucro e, em seguida, forneça várias sobrecargas do método de processamento - incluindo um genérico que será usado se nenhuma sobrecarga específica estiver disponível.

Quando eu chamo o método de processamento diretamente, a versão apropriada é selecionada corretamente. No entanto, quando eu o chamo a partir do método wrapper, ele sempre seleciona o genérico, mesmo se houver uma sobrecarga correspondente ao tipo de dados específico que eu passei para ele.

Existe alguma maneira de ajustar o código para que ele se comporte da maneira que eu preciso? Ou eu tenho que usar uma abordagem diferente.

Preciso que o código seja compatível com o Mono 2.6.

using System;

class Program
{
    static void Func<T>(T val)
    {
        Console.WriteLine("Generic Func");
    }

    static void Func(int val)
    {
        Console.WriteLine("Int Func");
    }

    static void Func(string val)
    {
        Console.WriteLine("String Func");
    }

    static void FuncWrap<T>(T val)
    {
        Console.Write("Wrap: ");
        Func(val);
    }

    static void Main(string[] args)
    {
        Func(2);
        Func("Potato");
        Func(2.0);

        FuncWrap(2);
        FuncWrap("Potato");
        FuncWrap(2.0);

        Console.Read();
    }
}

questionAnswers(1)

yourAnswerToTheQuestion