相当于"Dim As String*1"VB6到VB.NET

Log*_*man 7 vb.net string vb6 vba vb6-migration

我有一些需要迁移到VB.NET的VB6代码,我想查询这行代码,看看是否有办法在.NET中实现它

Dim strChar1 As String * 1
Run Code Online (Sandbox Code Playgroud)

Intellisense一直告诉我语句结束是预料之中的.

Mik*_*oss 10

这被称为"固定长度"字符串.在VB.NET中没有完全相同的东西.

编辑:嗯,好的,有VBFixedStringAttribute,但我很确定它只是存在,以便自动迁移工具可以更轻松地将VB6代码转换为VB.NET,而且它并不是真正的".NET方式".另请参阅文章中的警告,详细说明为什么它与VB6中的固定长度字符串不完全相同.

通常,如果从文件或网络读取固定大小的记录(即在协议帧中解析标头),则固定长度字符串仅在VB6中使用.

例如,您可能有一个文件包含一组固定长度的记录,这些记录都具有格式(整数,1个字符的字符串,双精度),您可以在VB6中将其表示为用户定义的类型:

Public Type Record
   anInteger As Integer
   aSingleCharacter As String * 1
   aDouble As Double
End Type

这样,从包含此格式记录的文件读取的VB6代码可以读取存储在文件中的每个固定大小的记录,特别是,它只读取1个字节aSingleCharacter.如果没有* 1,VB6将不知道从文件中读取多少个字符,因为a String通常可以有任意数量的字符.

在VB.NET中,您可以根据需要执行以下操作之一:

  • 如果长度很重要(例如,您需要从某个数据源中读取一个字节),请考虑使用数组,例如

    Dim aSingleByteArray(1) As Byte

  • 或者,您可以使用其中一个Stream类.特别是,如果要从网络套接字或文件中读取数据,请分别考虑使用NetworkStreamFileStream.甲是为字节对字节访问(即原始二进制访问).StreamReader是一个相关的类,它简化了基于文本的数据读取,因此,例如,如果您正在读取文本文件,这可能会很好.否则(如果处理二进制数据),坚持使用其中一个Stream类.

  • 如果长度无关紧要,您可以使用"正常" String.也就是说:

    Dim aNormalString As String

哪个答案是"正确的"真的取决于为什么在原始的VB6代码中声明它的原因.