Je pense que je dois manquer quelque chose, pourquoi je ne peux pas compiler ceci:Pourquoi ne pouvez-vous pas convertir un type générique ouvert contraint vers le type contraint?
class Foo<T> where T : Bar
{
T Bar;
}
abstract class Bar
{ }
class MyBar : Bar
{ }
static void Main(string[] args)
{
var fooMyBar = new Foo<MyBar>();
AddMoreFoos(fooMyBar);
}
static void AddMoreFoos<T>(Foo<T> FooToAdd) where T : Bar
{
var listOfFoos = new List<Foo<Bar>>();
listOfFoos.Add(FooToAdd); //Doesn't compile
listOfFoos.Add((Foo<Bar>)FooToAdd); //doesn't compile
}
'si vous appelez votre méthode avec un Foo alors l'appel échouera' => mais cet appel ne compilera pas à cause de la contrainte générique, où T: Bar, non? Cependant, +1 pour la nouvelle liste >() car cela résout en fait mon vrai problème! –
Bon point sur la contrainte. Confus de savoir pourquoi vous avez accepté l'autre réponse si j'ai résolu votre problème tho ... (Jon Skeet ou pas! ;-)) –