Yani, eminim bu daha önce bir yerde yanıtlanmış, ancak hiçbir yerde bulamadım. Bazı generics guru umuyor yardımcı olabilir.İşlem ile genel yöntem <T> parametresi
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
}
- değişken türü 'Orangutan' 'T'
Düzen türü parametre türü 'T'
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);
}
yapmak istediğim şey böyle ValidateUsing yöntemini çağırın oldu:
ValidateUsing(Foo);
Maalesef foo aşağıdaki gibiyse:
açıkça türünü belirtmek zorundaprivate void Foo(Orangutan obj)
{
//Do something
}
Ben ValidateUsing çağrı
Teşekkürler, sadece Orangutan'ı örnek olarak kullandım. Muhtemelen kötü olan. Eylemi herhangi bir IAnimal ile arayabilmek istiyorum. "Gerçek" kodda, IAnimal sınıfta özel bir alan olarak saklanır. Yani, hiçbir şeyi gerçekten oluşturmuyorum. –