【发布时间】:2013-05-09 01:46:11
【问题描述】:
我有一个遗留的 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# 编写的)。
【问题讨论】:
-
你应该扩展
IEnumerable<T>,而不是IQueryable<T>。 -
如果在 C# 中正确使用,键入
OrmExtensions.并查找方法会发生什么?它们是如何出现的?它们看起来像有效的扩展方法吗? -
将这些扩展方法编译为外部库,然后从您的 c# projet 添加对该库的引用
-
@TimS。该方法根本不可用。
-
@SLaks 我不同意。如果您需要扩展 IQueryable,那么这是可以接受的。也许您需要进一步解释?