Creo que debo estar perdiendo algo, por qué no puedo compilar este:¿Por qué no puedes convertir un genérico abierto limitado al tipo restringido?
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 tuviera que llamar a su método con un Foo entonces la llamada fallará' => pero esta llamada no se compilará debido a la limitación genérica, donde T: bar, ¿no? Sin embargo, +1 para la nueva lista >() ya que esto realmente resuelve mi problema real. –
Buen punto en la restricción. Confundido sobre por qué aceptaste la otra respuesta si resolví tu problema aunque ... (Jon Skeet o no! ;-)) –