Как я бросаю список объекта к списку интерфейса, который объект реализует в VB.net?

Должен быть .\SQLExpress или localhost\SQLExpress без знака $ в конце

См. Также здесь http://www.connectionstrings.com/sql-server-2008

6
задан thefroatgt 19 May 2009 в 22:16
поделиться

4 ответа

Добавление этого решения в качестве еще одного ответа, оно должно делать то, что вы хотите.

Sub DoIt(Of T As IBar)(ByVal l As List(Of T))
End Sub

Определение подгруппы с помощью обобщений.

2
ответ дан 9 December 2019 в 20:48
поделиться

Повторяющийся вопрос , но для C # (та же проблема). Там есть разные ответы, которые вы можете перевести на VB. Причина, по которой вы не можете этого сделать, - ковариация и контравариантность .

Я не специалист по VB, но мой предпочтительный способ C # - вызвать System.Collections.Generic.List . ConvertAll (x => (Tout) x) . (Я не знаю, как это переводится, если это так, на VB.)

Перевод VB:

System.Collections.Generic.List (Of T) .ConvertAll (Of TOut) (Function (x) CType (x, TOut))

4
ответ дан 9 December 2019 в 20:48
поделиться

Является ли производный базовый класс не вариантом, и базовый класс должен реализовывать интерфейс. Это заставит его работать.

Class BaseFoo
    Implements IBar
End Class

Class Foo
    Inherits BaseFoo
End Class

Sub DoIt(ByVal l As List(Of BaseFoo))
End Sub

Что-то вроде этого.

1
ответ дан 9 December 2019 в 20:48
поделиться

Проблема в том, что общие типы, такие как List (Of T), не конвертируются в какой-либо другой List (Of U), даже если приведение гарантированно безопасно. Помощь для этого приходит в VS2010, который, конечно, сейчас вам не очень помогает.

Как я думаю, это также было предложено в связанной ветке, если DoIt может принимать IEnumerable из IBar вместо списка, вы могли бы do:

DoIt(FooList.Cast(Of IBar))

или если вам действительно нужен список (и вы можете взять на себя накладные расходы), вы можете получить список:

DoIt(FooList.Cast(Of IBar).ToList)
5
ответ дан 9 December 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: