Если я попытаюсь вызвать свой метод расширения, который определен следующим образом:
Module LinqExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function ToSortableBindingList(Of TSource)(ByVal source As IEnumerable(Of TSource)) As IBindingList
If (source Is Nothing) Then
Throw New ArgumentNullException("source")
End If
Return New SortableBindingList(Of TSource)(New List(Of TSource)(source))
End Function
End Module
при вызове
Dim sss As String()
sss.AsEnumerable.ToSortableBindingList()
он выдает ошибку «ToSortableBindingList не является членом System. Collections.Generic.IEnumerable (Of String) ".
Примечание. Intellisense выполняет автозаполнение после последнего периода! Если я попытаюсь вызвать context.TestTable.AsEnumerable.ToSortableBindingList (TestTable - это класс, созданный на чистом EF4), он даже не появится с intellisense. Я не понимаю почему. Что не так с объявлением метода расширения «ByVal source As IEnumerable (Of TSource)»?
Хорошо, чтобы прояснить, что происходит, я хотел бы предоставить дополнительную информацию. Я могу отследить проблему до следующего:
Сценарий:
Assembly1 (корневое пространство имен "myapp"):
...
<System.Runtime.CompilerServices.Extension()> _
Public Function ToTest(ByVal source As String) As String
Return ""
End Function
...
'Вызов работает:
...
Dim a as string
a.ToTest()
...
Assembly2: (Включена ссылка на Assembly1)
'Вызов не работает:
imports myapp
...
Dim a as string
a.ToTest()