Questo è noto come una stringa "lunghezza fissa". Non esiste un equivalente esatto in VB.NET.
Edit: Beh, OK, c'è VBFixedStringAttribute, ma sono abbastanza sicuro che esiste solo in modo che gli strumenti di migrazione automatici possono più facilmente convertire il codice VB6 a VB.NET per voi, e non è davvero il "modo .NET" per fare le cose. Vedi anche gli avvertimenti nell'articolo per i dettagli sul perché questo non è ancora esattamente la stessa cosa di una stringa di lunghezza fissa in VB6.
In generale, stringhe di lunghezza fissa vengono utilizzati solo in VB6 se state leggendo record di dimensione fissa da un file o in rete (vale a dire analizzare le intestazioni in una cornice di protocollo).
Per esempio, si potrebbe avere un file che contiene un insieme di record a lunghezza fissa che tutti hanno il formato (intero, 1-character-string, doppio), che si può rappresentare in VB6 come dall'utente tipo definito:
Public Type Record
anInteger As Integer
aSingleCharacter As String * 1
aDouble As Double
End Type
in questo modo, il codice VB6 che legge dal file che contiene i record in questo formato in grado di leggere ogni record fisso di dimensioni memorizzati nel file, e, in particolare, si legge solo 1 byte per aSingleCharacter
. Senza lo * 1
, VB6 non avrebbe idea di quanti caratteri leggere dal file, dal momento che un String
può normalmente avere un numero qualsiasi di caratteri.
In VB.NET, è possibile effettuare una delle seguenti operazioni, a seconda delle esigenze:
Se le questioni di lunghezza (cioè è necessario leggere esattamente un byte da una sorgente di dati, ad esempio) considerare l'utilizzo di un array invece, come
Dim aSingleByteArray(1) As Byte
in alternativa, è possibile utilizzare uno dei Stream classi. In particolare, se stai leggendo i dati da un socket di rete o da un file, considera l'utilizzo di NetworkStream o FileStream, rispettivamente. A Il flusso è inteso per l'accesso byte per byte (ad esempio accesso binario non elaborato). StreamReader è una classe correlata che semplifica la lettura dei dati quando è basata su testo, pertanto potrebbe essere utile se si sta leggendo un file di testo, ad esempio. In caso contrario (se si tratta di dati binari), attenersi a una delle classi Stream.
Se la lunghezza non è importante, è sufficiente utilizzare un "normale" String
.Vale a dire:
Dim aNormalString As String
Quale risposta è "corretta" in realtà dipende il motivo per cui è stato dichiarato in questo modo nel codice VB6 originale.
fonte
2012-03-06 07:04:17
Quello che hai è una stringa di lunghezza fissa. Come dichiarare uno in VB.NET è discusso [qui] (http://stackoverflow.com/questions/2305377/how-to-declare-a-fixed-length-string-in-vb-net). –
@Jay: L'ho visto anche io, ma personalmente avrei evitato ** VBFixedStringAttribute **. È una delle tante cose nello spazio dei nomi ** Microsoft.VisualBasic ** che è stato trasferito da VB6 per rendere più facile la conversione in VB.NET quando .NET è uscito per la prima volta, ma IMHO è quasi sempre meglio evitare la maggior parte roba in quel namespace e optare invece per l'equivalente funzionalità "standard" .NET Framework. Voglio dire, hanno anche mantenuto il vecchio modello di gestione degli errori VB6 con 'On Error',' Goto' e 'Resume', anche se le eccezioni sono il modo previsto (e più potente) di gestire gli errori nel codice .NET ;-) –
@ Mike - Non ho davvero esaminato la classe VBFixedStringAttribute per determinare se usarlo è una cattiva idea o no, ma credo che questa domanda sia un errore di quello a cui mi sono collegato. Penso anche che la tua risposta sia migliore di quella che trovi lì, quindi +1 a te. (e ovviamente sono d'accordo con te sul fatto che l'uso del vecchio stile VB6 di gestione degli errori è una scelta sbagliata in un'app VB.NET!) –