Типизация VB.NET с объектом тега listview - PullRequest
2 голосов
/ 24 февраля 2010

В C # я бы сделал что-то вроде:

mytype val = (MyType) mylistview.SelectedItems (0) .tag;

как я могу сделать то же самое в VB.NET?

Ответы [ 3 ]

4 голосов
/ 24 февраля 2010

В подавляющем большинстве случаев оператор CType даст здесь правильное поведение.

Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)

Однако это не так во всех случаях. Причина в том, что между оператором преобразования C # и эквивалентным оператором в VB нет отображения 1-1. Оператор C # cast поддерживает как операторы CLR, так и определенные пользователем преобразования.

Два основных оператора VB - DirectCast и CType. DirectCast поддерживает только преобразования во время выполнения и пропустит определенные пользователем. CType поддерживает время выполнения и определенные пользователем преобразования. Но он также поддерживает лексические преобразования (например, строковый литерал "123" в тип Integer). Таким образом, он поймает все, что делает оператор C # cast, но также включает в себя больше.

4 голосов
/ 24 февраля 2010

Мой VB отстой, но я думаю, что это будет:

Dim val as MyType = CType(mylistview.SelectedItems(0).Tag, MyType)

или

Dim val as MyType = DirectCast(mylistview.SelectedItems(0).Tag, MyType)

DirectCast не выполняет никаких других преобразований, включая (IIRC) указанные пользователем преобразования, тогда как CType выполнит больше преобразований, чем приведение в C # будет

В данном конкретном случае, я думаю, DirectCast, вероятно, то, что вам нужно, поскольку это должно быть просто ссылочное преобразование.

3 голосов
/ 24 февраля 2010

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

val = CType(listview.selecteditems(0).tag,mytype)
...