Generische Methode mit dem Parameter Action <T>
Ich bin mir sicher, dass dies irgendwo zuvor beantwortet wurde, aber ich konnte es nirgendwo finden. Ich hoffe, dass ein Guru von Generika helfen kann.
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
}
Argumenttyp 'Orang-Utan' kann nicht dem Parametertyp 'T' zugeordnet werdenArgumenttyp 'IAnimal' kann nicht dem Parametertyp 'T' zugewiesen werdenBearbeiten: Basierend auf Yuriy und anderen VorschlägenIch könnte ein Casting machen 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);
}
Ich wollte die ValidateUsing-Methode folgendermaßen aufrufen:
ValidateUsing(Foo);
Wenn foo leider so aussieht:
private void Foo(Orangutan obj)
{
//Do something
}
Ich muss den Typ explizit angeben, wenn ich ValidateUsing aufrufe
ValidateUsing<Orangutan>(Foo);