VB.NET typecasting un oggetto tag listview
-
22-09-2019 - |
Domanda
In C # vorrei fare qualcosa di simile:
MyType val = (MyType) mylistview.SelectedItems (0) .Tag;
come posso fare la stessa cosa in VB.NET?
Soluzione
Il mio VB fa schifo, ma penso che potrebbe essere:
Dim val as MyType = CType(mylistview.SelectedItems(0).Tag, MyType)
o
Dim val as MyType = DirectCast(mylistview.SelectedItems(0).Tag, MyType)
DirectCast
non esegue alcuna altre conversioni - tra cui ( IIRC) conversioni specificati dall'utente, mentre CType
eseguirà più conversioni di un cast in C # sarebbe
In questo caso particolare, credo DirectCast
è probabilmente quello che stai dopo, come dovrebbe essere solo una conversione di riferimento.
Altri suggerimenti
Per la stragrande maggioranza dei casi l'operatore CType
darà il comportamento corretto qui.
Dim val = CType(mylistview.SelectedItems(0).Tag,MyType)
Tuttavia questo non è vero in tutti i casi. Il motivo per cui è che non v'è alcuna 1-1 mapping tra il C # getto dell'operatore e un operatore equivalente in VB. L'operatore C # fusione supporta sia CLR e operatori di conversione definiti dall'utente.
due principali operatori di cast di VB sono DirectCast e CType. DirectCast supporta la conversione runtime solo e salterà quelli definiti dall'utente. CType supporta runtime e le conversioni definite dall'utente. Ma supporta anche conversioni lessicali (come ad esempio la stringa letterale "123" per un tipo Integer
). Così sarà catturare tutto ciò che un operatore di C # getto fa ma includono anche più.
Non so se ho diritto di non sto sapendo cosa esattamente si sta cercando di fare, ma sintassi generale sarebbe:
val = CType(listview.selecteditems(0).tag,mytype)