VB.NET扩展方法

7
当我在我的方法上方应用标签时,我会收到以下错误: 这是我的示例:
<System.Runtime.CompilerServices.Extension()> _
     Public Sub test()

End Sub

我哪里错了?

编辑~直接从MSDN文章这里,出现了同样的错误。

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

我正在使用Visual Studio 2008和3.5框架进行项目。

解决方案~该项目在2.0框架上。更改为3.5即可运行。

4个回答

8

IDE指向的.net framework版本是什么?

另外,第一眼看上去扩展方法的语法似乎不正确。

代码不完整。请在示例中放置using语句,以便任何人都可以使用代码并编译它-以重现错误。


扩展是在.NET 3中引入的,因此不支持.NET 2.X项目。 - awe
通过一些额外的工作,2.0版本将支持扩展方法。我有一个编译到.NET 2.0框架的VS 2010 dll。我参考了以下两个链接获取信息:http://www.codeproject.com/Articles/31260/Extension-Methods-in-VB-NET请查看MSDN杂志文章末尾 - http://msdn.microsoft.com/en-us/magazine/cc163317.aspx#S7 - JohnL

4

如果出现以下情况之一,您才会收到此错误:

  1. 您未使用VS 2008-VS2008中添加了扩展方法支持。
  2. 您的代码没有引用System.Core.dll-也是在VS2008中添加的。

您可以检查这两个问题吗? 我怀疑您正在尝试使用VS2005创建扩展方法。 如果是这种情况,很遗憾,不支持。


我正在使用VS 2008。当我尝试添加对System.Core的引用时,它是灰色的(表示已添加)。 - Saif Khan

1
我建议在引入时添加命名空间,这样您就不必每次都输入它:
Imports System.Runtime.CompilerServices

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

End Sub

一旦您将其导入,您只需在每个方法的顶部添加Extension而不是整个内容即可。

正如shahkalpesh所说,您的扩展方法不完整,您需要添加要扩展的类型(请参见代码第一个参数)。我刚刚试玩了一下,发现如果您不提供要扩展的类型作为参数,编译器将会抛出错误。


你能否右键点击 <extension> _ 位并转到定义? - Nathan W

0

使用这个...

System.Runtime.CompilerServices.ExtensionAttribute

在您提到的命名空间中找不到名为“Extension”的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接