6

我有一个遗留的 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# 编写的)。

4

1 回答 1

5

你不应该使用ByRef.

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

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

于 2013-05-08T17:21:27.753 回答