我有一个旧的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#中)。

最佳答案

您不应该使用ByRef

VB.Net(显然)支持ref参数的扩展方法; C#(正确地)没有。
ByRef(在C#中为ref)参数允许该方法将新实例分配给调用方传递的变量或字段。
很少使用它们。

关于c# - 如何在C#项目中使用VB.Net扩展方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16446587/

10-17 02:37