Не могу понять исключение при использовании динамического с универсальной коллекцией в .net4

проверьте код ниже, пожалуйста:

static void Main(string[] args) {
    IList<dynamic> items = new List<dynamic>();
    items.Add(3);
    items.Add("solid");
    dynamic i = new ExpandoObject();
    items.Add(i); //System.Collections.Generic.IList<object>' does not contain a definition for 'Add'
    Console.WriteLine();
}

это ошибка в "динамическом" механизме?


person Inside    schedule 03.11.2011    source источник
comment
+1 хотелось бы больше узнать о сложности динамической привязки. Я только что попробовал это, и оказалось, что items.Add(new ExpandoObject()); в порядке, а items.Add((dynamic)new ExpandoObject()); нет.   -  person Daniel Earwicker    schedule 03.11.2011


Ответы (2)


Похоже на ошибку (или это запрос функции?):

https://connect.microsoft.com/VisualStudio/feedback/details/534288/ilist-dynamic-cannot-call-a-method-add-without-casting

person Daniel Earwicker    schedule 03.11.2011

Это должно помочь:

static void Main(string[] args) {
    IList<dynamic> items = new List<dynamic>();
    items.Add(3);
    items.Add("solid");
    dynamic i = new ExpandoObject();
    items.Add((object) i); // type-cast dynamic object
    Console.WriteLine();
}
person JoBot    schedule 02.04.2012
comment
Спасибо, трюк работает нормально, но мне больше нравится простота и ясность, чем трюк в моем коде :) - person Inside; 09.04.2012