Dot-Net
引用程序集中的擴展方法?
如果我嘗試呼叫定義如下的擴展方法:
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並確保它是一個公共模組