ho una libreria di classi eredità VB.Net che include alcuni metodi di estensione, una delle quali è più o meno questo:Come posso utilizzare metodi di estensione VB.Net in un progetto C#
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
Per utilizzare queste estensioni in VB Devo solo importare Extensions.OrmExtensions. Ho un altro progetto, che è in C# che dipende da quello VB con le estensioni e non riesco a farli funzionare. OrmExtensions non è disponibile e utilizza semplicemente lo spazio dei nomi VBProject.Extensions non rende disponibili le estensioni.
Ci sono più progetti che dipendono dal progetto VB e idealmente le estensioni dovrebbero essere disponibili a tutti loro.
Ho fatto un bel po 'di ricerca su google, ma non sono stato in grado di rivelare nulla sull'utilizzo effettivo dei metodi di estensione VB in C#. Presumo il problema è che sono tenuti a essere in un modulo, ma non sono stato in grado di confermarlo.
Preferisco non duplicare i metodi di estensione ovunque siano richiesti (specialmente nel nostro progetto di test unitario, che si trova in C#).
È necessario estendere "IEnumerable", non "IQueryable ". –
SLaks
Cosa succede se, in C# con l'uso corretto, si digita 'OrmExtensions' e si cercano i metodi? Come appaiono? Sembrano metodi di estensione validi? –
compila il metodo di estensione come libreria esterna e quindi aggiungi un riferimento a tale libreria dal tuo C# projet –