Методы расширения VB.NET - PullRequest
       12

Методы расширения VB.NET

7 голосов
/ 02 декабря 2008

когда я применяю метку выше моих методов, я получаю ошибку

Тип System.Runtime.CompilerServices.Extension не определено.

Вот мой образец

<System.Runtime.CompilerServices.Extension()> _
     Public Sub test()

End Sub

Куда я иду не так?

Edit ~ Straight from MSDN Article здесь , та же ошибка

</p> <pre> Imports System.Runtime.CompilerServices Module StringExtensions _ Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub End Module </pre> <p>

Я использую Visual Studio 2008 и 3.5 Framework в своем проекте.

Решение ~ Проект был на 2.0 Framework. Поменял на 3,5 и все работает.

Ответы [ 4 ]

8 голосов
/ 02 декабря 2008

На какую версию .net framework IDE указывает?

Также на первый взгляд синтаксис метода расширения выглядит некорректно.

Код неполный. Пожалуйста, поместите операторы использования в пример, чтобы кто-нибудь использовал код и скомпилировал его - чтобы воспроизвести ошибку.

4 голосов
/ 02 декабря 2008

Вы должны получить эту ошибку, только если выполняется одно из следующих условий

  1. Вы не используете VS 2008 - добавлена ​​поддержка метода расширения в VS2008
  2. Ваш код не имеет ссылки на System.Core.dll - также добавлен в VS2008

Можете ли вы проверить оба из них? Я хочу сказать, что вы пытаетесь использовать VS2005 для создания метода расширения. Если это так, то, к сожалению, это не поддерживается.

0 голосов
/ 02 декабря 2008

Я бы добавил пространство имен к импорту, чтобы вам не приходилось каждый раз вводить его:

Imports System.Runtime.CompilerServices

<Extension()> _
Public Sub Test(ByVal Value As String)

End Sub

Как только вы добавите его в свой импорт, вы можете просто добавить расширение в начало каждого метода вместо всего этого.

Как сказал шахкалпеш, ваш метод расширения неполон, вам нужно будет добавить тип, который вы хотите расширить (см. Первый параметр кода). Я только что поиграл и обнаружил, что если вы не предоставите тип для расширения в качестве параметра, компилятор выдаст ошибку.

0 голосов
/ 02 декабря 2008

Используйте это ...

System.Runtime.CompilerServices.ExtensionAttribute

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

...