https://stackoverflow.com/a/5311527/613130 № см
При использовании dynamic
объекта, вы не можете вызвать метод расширения через «синтаксис метода расширения». Для того, чтобы понять:
int[] arr = new int[5];
int first1 = arr.First(); // extension method syntax, OK
int first2 = Enumerable.First(arr); // plain syntax, OK
Оба они в порядке, но с dynamic
dynamic arr = new int[5];
int first1 = arr.First(); // BOOM!
int first2 = Enumerable.First(arr); // plain syntax, OK
Это логично, если вы знаете, как работают dynamic
объекты. A dynamic
переменная/поле/... является просто переменной object
переменной/полем/... (плюс атрибут), который компилятор C# знает, что следует рассматривать как dynamic
. И что означает «лечение как динамическое»? Это означает, что сгенерированный код вместо использования непосредственно переменной использует отражение для поиска необходимых методов/свойств/... внутри типа объекта (поэтому в этом случае внутри типа int[]
). Четкое отражение не может обойти все загруженные сборки, чтобы искать методы расширения, которые могут быть где угодно.
с подходом «этот объект», что не будет работать: ошибка intellisense или времени выполнения? – Serge
@Serge * Когда вы используете динамический объект, вы не можете вызвать метод расширения с помощью синтаксиса метода расширения. * Не имеет значения тип метода расширения. Если у вас есть 'dynamic b = something', вы не можете использовать ** any **' b .ExtensionMethod() ' – xanatos
Что значит« Я не могу »? Я могу, я просто спрашиваю, что будет результатом!;) – Serge