Also, ich bin mir sicher, dass das irgendwo draußen schon einmal beantwortet wurde, aber ich konnte es nirgends finden. Hoffe, dass einige Generika Guru helfen können.
%Vor%Bearbeiten: Basierend auf den Vorschlägen von Yuriy und anderen könnte ich einige Castings wie:
machen %Vor%Ich wollte die ValidateUsing-Methode folgendermaßen aufrufen:
%Vor%Leider, wenn foo so aussieht:
%Vor%Ich muss den Typ explizit angeben, wenn ich ValidateUsing
aufruft %Vor% Warum instanzierst du Orangutan
, wenn du IAnimal
akzeptieren sollst?
Wenn Sie Ihren generischen Parameter wiederverwenden, haben Sie keine Probleme mit dem Typ ...
Nun, im Hinblick darauf, warum Ihr Code nicht funktioniert, sagen Sie nur, dass der Typ T
von IAnimal
abgeleitet wird. Es könnte jedoch auch einfach ein Giraffe
als Orangutan
sein, also können Sie nicht einfach einen Orangutan
oder IAnimal
einem Parameter vom Typ T
zuweisen.
Die Sache ist, dass T für einige Typen steht, die übrigens INimal implementieren.
Wenn Sie also versuchen, action(new Organatum())
zu kompilieren, erhalten Sie einen Fehler, weil Sie angegeben haben, dass die Aktion einen Parameter vom Typ T
annehmen soll, der wiederum vom Typ sein könnte, sagen wir Fish
- you Organatum
kann nicht in Fish
umgewandelt werden, oder?
Wenn Sie eine Aktion auslösen wollen, die Parameter eines Typs enthält, der IAnimal
interface implementiert, dann vergessen Sie einfach Generics und verwenden Sie Action<IAnimal>
.
HTH.