Angenommen, es eine Identitätsfunktion ist, die lautet:Wie umgehen Sie Rang N Polymorphismus in C#?
T Id<T>(T t) { return t; }
Was soll ich geben F
?
void F<T>(Func<T, T> f) { // This is not sound!
System.Console.WriteLine("{0}", f(1));
System.Console.WriteLine("{0}", f("one"));
}
static void Main() {
F(Id);
}
denke ich, C# nicht Rang N-Polymorphismus und C# F
solide verfügt nicht geben kann. Ist das richtig?
Und dann, wie man solche Probleme umgehen?
Sie müssen viel erarbeiten. Es stimmt, dass der von Ihnen gepostete Code nicht funktioniert. Aber warum sollten Sie wollen, dass es funktioniert? Ihre "generische" Methode verwendet nur "T", um den Delegierten "f" aufzurufen. Sie könnten genauso gut die Methode 'void F (Func f) {...}' deklarieren und es würde funktionieren. –
'void F (Func f) {...}' ist nicht typsicher. Wenn "F" einen solchen Typ hat, kann "f" sein "string Foo (int v) {return v +"; } '. –
kakkun61
Dies scheint auf den ersten Blick eine akademische Frage zu einem Feature zu sein, das die C# -Sprache nicht unterstützt. Können Sie einen tatsächlichen Anwendungsfall angeben? – Corey