如何在C#项目中使用VB.Net扩展方法

时间:2013-05-08 17:19:01

标签: c# .net vb.net

我有一个遗留的VB.Net类库,其中包含一些扩展方法,其中一个大致如下:

Namespace Extensions
    Public Module OrmExtensions

        <Extension()>
        Public Function ToDomainObjectCollection(ByRef objects As OrmCollection(Of OrmObject)) As DomainObjectCollection
            Return objects.AsQueryable().ToDomainObjectCollection()
        End Function

        <Extension()>
        Public Function ToDomainObjectCollection(ByRef objects As IQueryable(Of OrmObject)) As DomainObjectCollection
            Dim doc As New DomainObjectCollection()
            For Each o In objects
                doc.Add(o.ToDomainObject())
            Next
            Return doc
        End Function
    End Module
End Namespace

要在VB中使用这些扩展,我只需要导入Extensions.OrmExtensions。我有另一个项目,它在C#中依赖于具有扩展的VB,我无法让它们工作。 OrmExtensions不可用,只使用命名空间VBProject.Extensions不能使扩展可用。

有多个项目依赖于VB项目,理想情况下,扩展应该对所有项目都可用。

我已经完成了一些谷歌搜索,但是还没有能够在C#中实际使用VB扩展方法。我认为问题是他们需要在模块中,但我无法确认。

我宁愿不在任何需要的地方复制扩展方法(特别是在C#中的单元测试项目中)。

1 个答案:

答案 0 :(得分:5)

您不应该使用ByRef

VB.Net(显然)支持ref参数的扩展方法; C#(理所当然地)没有。

ByRef(C#中的ref)参数允许该方法将新实例分配给调用者传递的变量或字段。
它们应该很少使用。