引用程序集中的扩展方法?

时间:2010-09-16 08:22:03

标签: .net vb.net extension-methods

如果我尝试调用我这样定义的扩展方法:

Module LinqExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function ToSortableBindingList(Of TSource)(ByVal source As IEnumerable(Of TSource)) As IBindingList
    If (source Is Nothing) Then
        Throw New ArgumentNullException("source")
    End If
    Return New SortableBindingList(Of TSource)(New List(Of TSource)(source))
End Function
End Module

致电

   Dim sss As String()
   sss.AsEnumerable.ToSortableBindingList()

它给出错误“ToSortableBindingList不是System.Collections.Generic.IEnumerable(Of String)的成员”。

注意:智能感知在最后一段时间后自动完成!如果我尝试调用context.TestTable.AsEnumerable.ToSortableBindingList(TestTable是纯EF4生成的类),它甚至不会出现智能感知。我不明白为什么。扩展方法声明“ByVal source As IEnumerable(Of TSource)”有什么问题?

***********************************编辑*********** *********************

好的,为了澄清发生了什么,我想提供一些额外的信息。 我可以将问题追踪到以下内容:

情景:

Assembly1(根名称空间“myapp”):

...
     <System.Runtime.CompilerServices.Extension()> _
        Public Function ToTest(ByVal source As String) As String
            Return ""
        End Function
...

'致电工作:

...
Dim a as string
a.ToTest()
...

Assembly2: (包括对Assembly1的参考)

'通话不起作用:

imports myapp
...
Dim a as string
a.ToTest()

1 个答案:

答案 0 :(得分:18)

您的命名空间“myapp”不能直接包含“ToTest”功能,那里定义了一个模块。 试试

Imports myapp.LinqExtensions

并确保它是公共模块