C #: Generische Methode ruft keine spezifische Methodenüberladung auf

Ich versuche, eine generische Methode in C # zu erstellen, die verschiedene Methoden basierend auf dem Argumentdatentyp in ihrem Hauptteil aufruft und ihr Ergebnis anschließend verarbeitet. Ich versuche dies zu erreichen, indem ich eine generische Wrapper-Methode erstelle und dann mehrere Überladungen der Verarbeitungsmethode bereitstelle - einschließlich einer generischen, die verwendet wird, wenn keine spezifische Überladung verfügbar ist.

Wenn ich die Verarbeitungsmethode direkt aufrufe, ist die entsprechende Version richtig ausgewählt. Wenn ich es jedoch über die Wrapper-Methode aufrufe, wird immer die generische Methode ausgewählt, auch wenn für den bestimmten Datentyp, den ich übergeben habe, eine passende Überladung vorliegt.

Ist es eine Möglichkeit, den Code so anzupassen, dass er sich so verhält, wie ich es brauche? Oder muss ich einen anderen Ansatz verwenden.

Ich brauche den Code, um mit Mono 2.6 kompatibel zu sein.

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();
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage