Supponiamo, ad esempio, ho una classe:Perché una funzione che accetta IEnumerable <interface> non accetta IEnumerable <class>?
public class MyFoo : IMyBar
{
...
}
Poi, vorrei utilizzare il seguente codice:
List<MyFoo> classList = new List<MyFoo>();
classList.Add(new MyFoo(1));
classList.Add(new MyFoo(2));
classList.Add(new MyFoo(3));
List<IMyBar> interfaceList = new List<IMyBar>(classList);
Ma questo produce l'errore:
`Argument '1': cannot convert from 'IEnumerable<MyFoo>' to 'IEnumerable<IMyBar>'
Perchè è questo? Poiché MyFoo implementa IMyBar, ci si aspetterebbe che un IEnumerable di MyFoo possa essere trattato come un IEnumerable di IMyBar. Un banale esempio del mondo reale che sta producendo una lista di macchine, e poi viene detto che non era un elenco di veicoli.
E 'solo un disturbo secondario, ma se qualcuno può far luce su questo, mi sarebbe molto obbligata.
La risposta che cercate è stato anche coperto in questa domanda: http://stackoverflow.com/questions/2346763/any-simple-way-to- spiegare-perché-io-non-posso-listanimal-animals-new-arraylistdo/2346857 # 2346857 –
Sì grazie - L'ho visto nella lista "correlata" una volta che ho postato la domanda, ma non è venuto fuori mentre Stavo scrivendolo ... –