Вы могли бы сделать несколько вещей. Например, элементы списка относятся к Animal
. Использование вашего кода:
cat.Play(new List<Cat>().Cast<Animal>().ToList());
Другим является создание Animal
общего, поэтому cat.Play(new List<Cat>());
будет работать.
class Animal<T>
{
public virtual void Play(List<T> animals) { }
}
class Cat : Animal<Cat>
{
public override void Play(List<Cat> cats)
{
}
}
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
cat.Play(new List<Cat>());
}
}
Другим способом является не создание Animal
общего, а метода Play
и ограничение этого на T : Animal
class Animal
{
public virtual void Play<T>(List<T> animals) where T : Animal { }
}
class Cat : Animal
{
public override void Play<T>(List<T> animals)
{
}
}
Наконец, если вы находитесь на C # 4 и вам нужно только перечислить список и не изменять его, проверьте ответ Эрика Липперта на IEnumerable<Animal>
.
попробуйте изменить URL вашего продукта, сделать его другим