Also, ich bin sicher, dass dies irgendwo da draußen zuvor beantwortet wurde, aber ich konnte es nirgendwo finden. Hoffe, dass einige Generika Guru helfen können.Generische Methode mit Aktion <T> Parameter
public interface IAnimal{}
public class Orangutan:IAnimal{}
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action(orangutan); //Compile error 1
//This doesn't work either:
IAnimal animal = new Orangutan();
action(animal); //Compile error 2
}
- Argument Typ 'Orangutan' ist nicht belegbar Typ 'T'
- Argument Typ 'IAnimal' zuordenbar ist in den Parameter nicht Typ
Edit 'T' für den Parameter: Based auf Yuriy und andere Vorschläge, könnte ich einige Gießen wie:
public void ValidateUsing<T>(Action<T> action) where T : IAnimal
{
Orangutan orangutan = new Orangutan();
action((T)(IAnimal)orangutan);
//This doesn't work either:
IAnimal animal = new Orangutan();
action((T)animal);
}
Das, was ich rufen Sie tun wollte, war die ValidateUsing Methode wie folgt:
ValidateUsing(Foo);
Leider, wenn foo wie folgt aussieht:
private void Foo(Orangutan obj)
{
//Do something
}
Ich muss ausdrücklich auf die Art angeben, wenn ich rufe ValidateUsing
ValidateUsing<Orangutan>(Foo);
Danke bdukes, ich habe gerade Orangutan als Beispiel benutzt. Wahrscheinlich ein schlechter. Ich möchte die Aktion mit jedem IAnimal aufrufen können. Im "echten" Code wird das IAnimal als privates Feld in der Klasse gespeichert. Also, ich bin nicht wirklich instanziiert irgendetwas. –