Обобщения с помощью Automapper — возвращают единую запись

#.net #vb.net #generics #mapping

#.net #vb.net #дженерики #сопоставление

Вопрос:

У меня есть такой код:

 Public Function MakeDatareaderList(Of I As New)(ByVal objDR As DbDataReader) As List(Of I)
            Dim list As List(Of I)
            Mapper.CreateMap(Of DbDataReader, List(Of I))()
            list = Mapper.Map(Of SqlDataReader, List(Of I))(CType(objDR, SqlDataReader))
            Return list
        End Function
  

Это работает так, как ожидалось, т. Е. передается тип, а затем возвращается список этого типа. Могу ли я сделать что-то вроде этого:

 Public Function MakeDatareaderFirst(Of I As New)(ByVal objDR As DbDataReader) As I
            Mapper.CreateMap(Of IDataReader, IEnumerable(Of I))()
            I = Mapper.Map(Of IDataReader, IEnumerable(Of typeUSN))(objDR).First()
            Return I
        End Function
  

В приведенном выше коде ошибка: I не может использоваться как выражение. Приведенный выше код возвращает один объект, заполненный данными.

Ответ №1:

вы не создали переменную, чтобы присвоить результат функции mapper для вас? вы пытаетесь присвоить ее типу I

не сработало бы это:

 Public Function MakeDatareaderFirst(Of I As New)(ByVal objDR As DbDataReader) As I
    Dim instance as I
    Mapper.CreateMap(Of IDataReader, IEnumerable(Of I))()
    instance = Mapper.Map(Of IDataReader, IEnumerable(Of I))(objDR).First()
    Return instance
End Function
  

Комментарии:

1. Да, это было так. Пожалуйста, измените typeUSN на I в строке 4 для будущих пользователей, которые могут просмотреть этот вопрос.