Во-первых, пример, который выполняет :
internal class Program {
static void Main(string[] args) {
ICollection myList = new List();
myList.Add("A");
myList.Add("B");
myList.Add("C");
MyMethod(myList);
}
private static void MyMethod(IEnumerable myList) {
foreach(string myItem in myList) {
Console.WriteLine(myItem);
}
}
}
Я объявляю свой объект как Icollection , а фактический объект-это список , и я могу передать его методу, который ожидает, что он не поддается . PrettyPrint-Override ">
Код: Выделить всё
internal class Program {
static void Main(string[] args) {
IDictionary myDictionary = new Dictionary();
myDictionary.Add("First", new List());
myDictionary["First"].Add("A");
myDictionary["First"].Add("B");
myDictionary["First"].Add("C");
myDictionary.Add("Second", new List());
myDictionary["Second"].Add("X");
myDictionary["Second"].Add("Y");
myDictionary["Second"].Add("Z");
MyMethod(myDictionary);
}
private static void MyMethod(IDictionary myDictionary) {
foreach (KeyValuePair keyValuePair in myDictionary) {
foreach (string item in keyValuePair.Value) {
Console.WriteLine(keyValuePair.Key);
Console.WriteLine(item);
}
}
}
}
, и он не будет иметь его
Код: Выделить всё
Argument 1: cannot convert from 'System.Collections.Generic.IDictionary' to 'System.Collections.Generic.IDictionary'
< /code>
Если я изменяю метод на < /p>
private static void MyMethod(IDictionary myDictionary) {
foreach (KeyValuePair keyValuePair in myDictionary) {
foreach (string item in keyValuePair.Value) {
Console.WriteLine(keyValuePair.Key);
Console.WriteLine(item);
}
}
}
< /code>
Тогда он счастлив. Но почему? Icollection Подробнее здесь: https://stackoverflow.com/questions/797 ... enumerable
Мобильная версия