Ich versuche eine generische Methode in C# zu erstellen, die verschiedene Methoden auf der Basis des Argumentdatentyps in seinem Körper aufrufen und ihr Ergebnis anschließend verarbeiten wird. Ich versuche dies zu erreichen, indem ich eine generische Wrapper-Methode erstelle und dann mehrere Überladungen der Verarbeitungsmethode zur Verfügung stelle - einschließlich einer generischen, die verwendet wird, wenn keine spezifische Überladung verfügbar ist.C#: Generische Methode ruft keine spezifische Methodenüberladung auf
Wenn ich die Verarbeitungsmethode direkt aufrufen, wird die entsprechende Version korrekt ausgewählt. Wenn ich es jedoch von der Wrapper-Methode aus aufrufe, wählt es immer die generische, selbst wenn es eine passende Überladung für den spezifischen Datentyp gibt, den ich ihm übergeben habe.
Gibt 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 mit Mono 2.6 kompatibel 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();
}
}
können Sie FuncWrap-Überladungen verwenden, die ebenfalls ein int und eine Zeichenfolge verwenden (oder einfach die Func-Methoden direkt ohne Umbruch verwenden). –