Ответ 1
Я считаю, что я сузил это с привязкой к методу расширения Linq Where
.
Это работает:
d.AsEnumerable()
.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
И это работает (вызов метода расширения статически):
Enumerable.Where(d.AsEnumerable(),o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
но это не так:
d.Where(o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Если я вызываю статический метод расширения без AsEnumerable()
:
Enumerable.Where(d,o => o.Key.Contains("b"))
.ToList()
.ForEach(i => Console.WriteLine(i.Value));
Я получаю лучшую ошибку компилятора:
Аргумент 1: невозможно преобразовать из
'UserQuery.CustomDictionary'
в'System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,dynamic>>'
Поэтому по какой-то причине компилятор не может привязать унаследованный класс к методу расширения.
Также работают следующие методы:
- явно лить
d
вIEnumerable<System.Collections.Generic.KeyValuePair<string,dynamic>>
- используя
object
вместоdynamic