2

IEnumerable(Of Contact) の OrderBy メソッドが取るのと同じ型である Func(Of Contact, TKey) 型の並べ替えパラメーターを取る GetAllContacts メソッドを作成したいと考えています。これが私のコードです:

    Public Function GetAllContacts(Of TKey)(ByVal sort As Func(Of Contact, TKey), ByVal sortDirection As SortDirection) As IEnumerable(Of Contact) Implements IContactRepository.GetAllContacts
        Select Case sortDirection
            Case sortDirection.Ascending
                Return ContactList.OrderBy(sort)
            Case sortDirection.Descending
                Return ContactList.OrderByDescending(sort)
        End Select
    End Function

GetAllContacts(Func(c) c.ContactID, SortDirection.Ascending) を呼び出すと、エラーが発生します。

"Value of type 'System.Func(Of Contact, String)' cannot be converted to 'Integer'." on the first parameter

"Too many arguments to extension method 'Public Function ElementAtOrDefault(index As Integer) As Contact' defined in 'System.Linq.Enumerable'." on the second parameter.

私は何が欠けていますか?

4

2 に答える 2

1

私はこれを試しました(ネット4.0):

Public Function tst(a As String) As Integer
        Return a.Length
    End Function

    Public Function GetAllContacts(Of TKey)(ByVal sort As Func(Of String, TKey), ByVal sortDirection As DirectoryServices.SortDirection) As IEnumerable(Of String)
        Return {"a"}
    End Function

この:

GetAllContacts(AddressOf tst, DirectoryServices.SortDirection.Ascending)
GetAllContacts(Function(a As String) As Integer
                       Return a.Length
                   End Function, DirectoryServices.SortDirection.Ascending)
GetAllContacts(Function(a) a.Length, DirectoryServices.SortDirection.Ascending)

そして、私はエラーがありません。

于 2012-05-28T13:58:28.383 に答える
0

これは、不適切なエラー メッセージの場合です。実装とは異なる署名がインターフェイスにありました。署名を修正するとすぐに、エラーはなくなりました。

于 2012-05-29T11:11:58.517 に答える