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

标签 .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()
...

装配2: (包括对 Assembly1 的引用)

'调用不起作用:

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

最佳答案

你的命名空间“myapp”不能直接包含函数“ToTest”,那里定义了一个模块。 尝试一下

Imports myapp.LinqExtensions

并确保它是公共(public)模块

关于.net - 引用程序集中的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3724891/

相关文章:

c# - 识别扩展方法的反射(reflection)

.net - 在运行时,与扩展方法相关的开销是多少? (。网)

c# - 使用 VS 2012 在 Build 上生成 T4

c# - wpf windows 位置问题

vb.net - VB.NET 中的除法

wpf - 给定 WPF 控件的内容之一,如何获取 ElementHost 控件

c# - 如何将await.WhenAny() 与GetAwaiter 扩展方法结合起来

c# - MySql 从列中选择所有数据并计数

c# - C# 中的递归泛型类型参数

css - Vb.net 8.5 x 11paper 到 webform