Ich versuche, eine Erweiterungsmethode zu definieren, die ein Objekt eines vom Aufruf definierten Typs zurückgeben kann.Wie kann ich eine generische Erweiterungsmethode definieren
Wunsch Gebrauch:Cat acat = guy.GiveMeYourPet<Cat>();
Versuchte Implementierung
Ich habe keine Probleme definieren, generische Methoden wie folgt aus:
public static T GiveMeYourPet<T>(Person a) { ... }
Cat acat = GiveMeYourPet<Cat>(guy);
oder Erweiterungsmethoden wie folgt aus:
public static Cat GiveMeYourPetCat<P>(this P self) where P : Person, ... { ... }
Cat acat = guy.GiveMeYourPetCat();
Aber wenn ich versuche zu tun, was ich wirklich will:
public static T GiveMeYourPet<T, P>(this P self) where P : Person, ... { ... }
Cat acat = guy.GiveMeYourPet<Cat>();
Der Compiler erwartet GiveMeYourPet() 2 Typargumente zu erhalten (auch wenn man durch den Aufruf der Erweiterung Methode für das Objekt guy
implizit zur Verfügung gestellt.
Was kann ich tun, damit dies funktioniert?
Bitte beachte, dass ich auch die Reihenfolge versucht haben Umkehr in der die Parameter definiert sind, aber es ändert sich nichts:
public static T GiveMeYourPet<P, T>(this P self)
Der folgende Aufruf funktioniert auch nicht, weil Sie nicht einen Methodenaufruf in der Art haben kann Spezifikation:
Ich denke, Sie bräuchten in T als Parameter explizit übergeben - wie sonst wird der Compiler wissen, was zurückkehren zu geben? – Tim
Sie können nicht nur einige Parameter als implizit definieren. Es ist alles oder nichts. – Andre
Ich glaube nicht, dass Erweiterungsmethoden mit einem generischen "this" -Typ arbeiten; Die erste Lösung sollte jedoch funktionieren. – poke