Domanda

In C # vorrei fare qualcosa di simile:

  

MyType val =   (MyType) mylistview.SelectedItems (0) .Tag;

come posso fare la stessa cosa in VB.NET?

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top