Esto se conoce como cadena de "longitud fija". No hay un equivalente exacto en VB.NET.
Editar: Bueno, está bien, no hay VBFixedStringAttribute, pero estoy bastante seguro de que existe únicamente para que las herramientas de migración automatizados pueden convertir más fácilmente el código de VB6 a VB.NET para usted, y no es realmente la "forma de .NET" para hacer cosas. También vea las advertencias en el artículo para obtener detalles sobre por qué esto todavía no es exactamente lo mismo que una cadena de longitud fija en VB6.
Generalmente, las cadenas de longitud fija solo se utilizan en VB6 si está leyendo registros de tamaño fijo desde un archivo o en la red (es decir, analizando encabezados en un marco de protocolo).
Por ejemplo, es posible que tenga un archivo que contiene un conjunto de registros de longitud fija que todos tienen el formato (número entero, 1-serie-caracteres, doble), que se podía representar en VB6 como el usuario tipo definido:
Public Type Record
anInteger As Integer
aSingleCharacter As String * 1
aDouble As Double
End Type
de esta manera, el código de Visual Basic 6 que lee desde el archivo que contiene los registros en este formato puede leer cada registro fijo de tamaño almacenados en el archivo y, en particular, sólo se leerá 1 byte para aSingleCharacter
. Sin el * 1
, VB6 no tendría idea de cuántos caracteres leer del archivo, ya que un String
normalmente puede tener cualquier cantidad de caracteres.
En VB.NET, puede realizar una de las siguientes, en función de sus necesidades:
Si los asuntos de longitud (es decir, es necesario leer exactamente un byte de una fuente de datos, por ejemplo) considerar el uso de una matriz en lugar, como
Dim aSingleByteArray(1) As Byte
como alternativa, puede utilizar uno de los Stream clases. En particular, si está leyendo datos de un socket de red o un archivo, considere usar NetworkStream o FileStream, respectivamente. Una secuencia Stream está destinada para el acceso byte por byte (es decir, acceso binario en bruto). StreamReader es una clase relacionada que simplifica la lectura de datos cuando está basada en texto, por lo que podría ser bueno si está leyendo un archivo de texto, por ejemplo. De lo contrario (si se trata de datos binarios), quédese con una de las clases Stream.
Si la longitud no importa, puede utilizar un "normal" String
.Es decir:
Dim aNormalString As String
cuál es la respuesta "correcta" Realmente depende de qué se declaró que forma en el código VB6 originales.
Lo que tienes allí es una cadena de longitud fija. Cómo se declara uno en VB.NET se discute [aquí] (http://stackoverflow.com/questions/2305377/how-to-declare-a-fixed-length-string-in-vb-net). –
@Jay: Yo también vi eso, pero personalmente rehuiría ** ** VBFixedStringAttribute **. Es una de las muchas cosas en el espacio de nombres ** Microsoft.VisualBasic ** que fue una transferencia de VB6 para facilitar la conversión a VB.NET cuando apareció .NET, pero en mi humilde opinión casi siempre es mejor evitar la mayor parte del cosas en ese espacio de nombres y opta por la funcionalidad equivalente "estándar" .NET Framework en su lugar. Quiero decir, incluso conservaron el antiguo modelo de manejo de errores VB6 con 'On Error',' Goto' y 'Resume', aunque las excepciones son la forma intencionada (y más poderosa) de manejar los errores en el código .NET ;-) –
@Mike - Realmente no he investigado la clase VBFixedStringAttribute para determinar si usarla es una mala idea o no, pero creo que esta pregunta es una trampa de la que me he vinculado. También creo que tu respuesta es mejor que las que se encuentran allí, así que +1 para ti. (y, por supuesto, estoy de acuerdo con usted en que usar el viejo estilo VB6 de manejo de errores es una mala elección en una aplicación VB.NET) –