Recentemente ho avuto problemi durante il tentativo di aggiungereRange (IEnumerable) a un elenco. Probabilmente un problema classico, ma non lo capisco davvero.C# Impossibile convertire da IEnumerable <Base> a IEnumerable <Derived>
Capisco che i metodi che si aspettano un parametro List non siano soddisfatti da un elenco, perché potrebbero provare ad aggiungere una Base all'elenco, il che è ovviamente impossibile.
Ma se ottengo questo correttamente, dal momento che IEnumerables non può essere modificato, dovrebbe funzionare in questo caso.
il codice che ho pensato di simile a questo:
class Foo
{
}
class Bar : Foo
{
}
class FooCol
{
private List<Foo> m_Foos = new List<Foo>();
public void AddRange1(IEnumerable<Foo> foos)
{
m_Foos.AddRange (foos); // does work
}
public void AddRange2<T>(IEnumerable<T> foos) where T : Foo
{
m_Foos.AddRange (foos); // does not work
}
}
class Program
{
static void Main(string[] args)
{
FooCol fooCol = new FooCol();
List<Foo> foos = new List<Foo>();
List<Bar> bars = new List<Bar>();
fooCol.AddRange1 (foos); // does work
fooCol.AddRange1 (bars); // does not work
fooCol.AddRange2 (foos); // does work
fooCol.AddRange2 (bars); // does work
}
}
ho cercato di passare un suggerimento per il compilatore nel metodo AddRange2, ma questo appena trasferita a problema in giro.
Il mio modo di pensare è imperfetto? Si tratta di una limitazione della lingua o è di progettazione?
IIRC, il supporto per questo tipo di operazioni è stato aggiunto a Java 1.5, quindi forse sarà aggiunto a C# in futuro, anche in futuro ...?
Duplicazione di varie altre domande, incluso più recentemente http://stackoverflow.com/questions/632399 –
In effetti, mi dispiace. Il mio google-jutsu ha ancora bisogno di miglioramenti. – mafu
Nessun problema. Sarebbe bello avere una FAQ per-tag, IMO ... –