如果我尝试调用定义如下的扩展方法:
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()
...
装配2: (包括对 Assembly1 的引用)
'调用不起作用:
imports myapp
...
Dim a as string
a.ToTest()
最佳答案
你的命名空间“myapp”不能直接包含函数“ToTest”,那里定义了一个模块。 尝试一下
Imports myapp.LinqExtensions
并确保它是公共(public)模块
关于.net - 引用程序集中的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3724891/