2010-04-20 4 views
2
Public Function CastToT(Of T)(ByVal GenericType(Of Object) data) As GenericType(Of T) 
    Return DirectCast(data, GenericType(Of T)) 
End Function 

Вышеуказанное ясно не работает. Есть ли способ выполнить этот отбор, если я знаю, что все объекты внутри данных на самом деле являются типом T?Литейные типы

+1

Это невозможно, за исключением интерфейсов. – SLaks

+0

Если бы вы написали это как ответ вместо комментария, вы бы только заработали себе 15 очков ... Спасибо. –

+0

Это FAQ. Например. см. это для подробного лечения: http://stackoverflow.com/questions/2033912/c-variance-problem-assigning-listderived-as-listbase –

ответ

2

Это невозможно, за исключением интерфейсов.

1

Нет, вы не можете использовать его напрямую. Предположительно, ваш GenericType - это своего рода контейнер. Вам просто нужно создать новый экземпляр GenericType(Of T) и скопировать содержимое в него, отбросив каждый объект от Object до T. Если GenericType был System.Collections.List(Of T), тогда LINQ делает это очень просто.

+0

Спасибо Евгению. DotNET 2.0 только для меня нет Linq. Написание функции, которая передает все элементы, не проблема, просто подумал, есть ли грязный трюк, который я мог бы использовать. –

Смежные вопросы