Генерация методов расширения с использованием System.CodeDom - PullRequest
6 голосов
/ 16 мая 2011

Кто-нибудь когда-нибудь пытался генерировать методы расширения, используя System.CodeDom под .NET 4.0?Кажется, нет никакого способа указать CodeMemberMethod или CodeParameterDeclarationExpression как метод / параметр расширения.

Если это невозможно, есть ли хорошие обходные пути?

Спасибо

Ответы [ 2 ]

6 голосов
/ 16 мая 2011

Очевидно, что CodeDom не может сгенерировать правильный код для первого параметра метода расширения, но вы можете обмануть его следующим образом:

var param = new CodeParameterDeclarationExpression("this string", "s");

Он будет блаженно игнорировать тот факт, что «эта строка» не является допустимым типом ...

0 голосов
/ 16 мая 2011

См. Атрибут расширения

Цитата:

В Visual Basic этот атрибут следует использовать для создания метода расширения.Для получения дополнительной информации см. Методы расширения (Visual Basic).

В C # вам не нужно использовать этот атрибут;Вы должны использовать модификатор this (C # Reference) для первого параметра, чтобы создать метод расширения.Компилятор автоматически испускает ExtensionAttribute для методов расширения.Для получения дополнительной информации см. Методы расширения (Руководство по программированию в C #).

Если вы пишете компилятор, который поддерживает методы расширения, ваш компилятор должен генерировать этот атрибут для каждого метода расширения и для каждого класса и сборки, содержащих один илидругие методы расширения.

...