VB.NET扩展方法

时间:2008-12-02 01:56:34

标签: .net vb.net extension-methods

当我在我的方法上方应用标记时,我收到错误

  

未定义类型System.Runtime.CompilerServices.Extension。

这是我的样本

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

End Sub

我哪里错了?

编辑〜直接来自MSDN文章here,同样的错误

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 Framework。

  

解决方案〜该项目在2.0 Framework上。更改为3.5,它可以工作。

4 个答案:

答案 0 :(得分:8)

IDE指向什么版本的.net框架?

此外,乍一看,扩展方法的语法看起来不正确。

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

答案 1 :(得分:4)

如果满足下列条件之一,您应该只会收到此错误

  1. 您没有使用VS 2008 - 在VS2008中添加了扩展方法支持
  2. 您的代码没有对System.Core.dll的引用 - 也在VS2008中添加
  3. 你能检查这两个吗?我的supsicion是你试图使用VS2005创建一个扩展方法。如果是这种情况,很遗憾不支持。

答案 2 :(得分:0)

使用此...

System.Runtime.CompilerServices.ExtensionAttribute

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

答案 3 :(得分:0)

我会将命名空间添加到导入中,因此您不必每次都输入它:

Imports System.Runtime.CompilerServices

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

End Sub

在导入中使用后,只需将Extension添加到每个方法的顶部而不是整个方法。

由于shahkalpesh说你的扩展方法不完整,你需要添加你想要扩展的类型(参见代码first parm)。我刚玩了一个游戏,发现如果你没有提供一个类型作为参数扩展,那么编译器会抛出一个错误。