Dot-Net

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

  • September 17, 2010

如果我嘗試呼叫定義如下的擴展方法:

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) 的成員”。

注意:Intellisense 會在最後一個週期後自動完成!如果我嘗試呼叫 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()

您的命名空間“myapp”不能直接包含函式“ToTest”,那裡定義了一個模組。嘗試

Imports myapp.LinqExtensions

並確保它是一個公共模組

引用自:https://stackoverflow.com/questions/3724891