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# (当然のことながら) はそうではありません。

( C# ではByRef)refパラメーターを使用すると、メソッドは呼び出し元から渡された変数またはフィールドに新しいインスタンスを割り当てることができます。
それらはめったに使用されるべきではありません。

于 2013-05-08T17:21:27.753 に答える