C #: универсальный метод не вызывает конкретную перегрузку метода

Я пытаюсь создать универсальный метод в C #, который будет вызывать различные методы, основанные на типе аргумента в его теле, и впоследствии обрабатывать их результат. Я пытаюсь достичь этого путем создания универсального метода-обертки, а затем предоставлю несколько перегрузок метода обработки, включая общий, который будет использоваться, если нет конкретной перегрузки.

Когда я вызываю метод обработки напрямую, соответствующая версия выбирается правильно. Однако, когда я вызываю его из метода-обертки, он всегда выбирает общий, даже если есть соответствующая перегрузка для конкретного типа данных, который я ему передал.

Есть ли способ настроить код так, чтобы он вел себя так, как мне нужно? Или я должен использовать другой подход.

Мне нужен код, чтобы быть совместимым с 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();
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос