GetType не определен?

#vb.net #visual-studio-2008

#vb.net #visual-studio-2008

Вопрос:

Я разрабатываю vb.net программа с VS2008. В моем случае dt_list является членом экземпляра как список (из одного). Когда я писал

 dt_list = CType(ser2.Deserialize(r), dt_list.GetType())  

VS2008 жалуется на «Тип»dt_list.GetType()’ не определен.».

Почему? Заранее спасибо.

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

1. @Hand-E-Food dt_list является членом экземпляра в виде списка (из одного)

2. Извините, я, по-видимому, совершенно слеп.

Ответ №1:

Причина, по которой это недопустимо, заключается в том, что точное значение типа для GetType() должно быть определено во время выполнения. Вторым параметром CType может быть только «выражение, допустимое в предложении As в операторе Dim, то есть имя любого типа данных, объекта, структуры, класса или интерфейса», например List(Of String) , которое может быть определено во время компиляции.

Соответственно, следующее является законным:

 dt_list = CType(ser2.Deserialize(r), List(Of Single))
  

Редактировать:

Однако приведение к произвольному типу, где тип неизвестен во время компиляции, является более сложным. Предлагаемый ответ на этот вопрос на форумах MSDN показывает один подход. Хотя это на C #, я предполагаю, что тот же подход может быть использован в VB.NET как хорошо.

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

1. Итак, короче говоря, GetType — это процедура времени выполнения, в то время как CType нужен параметр времени компиляции. Есть ли способ выполнить динамическое приведение?

Ответ №2:

Чего вы пытаетесь достичь, выбирая тип приведения во время выполнения?

Возможно, вы сможете решить свою проблему с помощью интерфейса.

 Dim dt_list As IList = Ctype(ser2.Deserialize(r), IList)
  

Это дает вам доступ ко всем элементам списка в IList.