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

时间:2012-03-06 06:32:26

标签: vb.net string vba vb6 vb6-migration

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

Dim strChar1 As String * 1

Intellisense一直告诉我语句结束是预期的。

4 个答案:

答案 0 :(得分: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代码可以读取存储在文件中的每个固定大小的记录,特别是,它只会读取aSingleCharacter的1个字节。如果没有* 1,VB6就不知道从文件中读取了多少个字符,因为String通常可以包含任意数量的字符。

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

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

    Dim aSingleByteArray(1) As Byte

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

  • 如果长度无关紧要,您可以使用“普通”String。也就是说:

    Dim aNormalString As String

哪个答案是“正确的”,这实际上取决于为什么在原始VB6代码中声明它的原因。

答案 1 :(得分:2)

看到你正在进行VB6迁移,我肯定会考虑VBFixedStringAttribute以及Mike Spross列出的其他选项,但是,在这种情况下,因为它是一个单个字符,{{{在这种情况下,1}}也可能是一个选项。

正如其他地方所提到的Char仅由VBFixedStringGet VB I / O API确认。因此,最好的解决方案(除了重写引用“固定长度字符串”的代码之外)就是编写自己的等效Put。有关详细信息,请参阅this answer

答案 2 :(得分:2)

固定长度字符串已在VB.NET中弃用,因为有几个更好的选项。

由于您的固定长度字符串只有一个字符长,因此在这种情况下您可以使用Char类型,如Mark建议的那样。

Dim strChar1 As Char

答案 3 :(得分:0)

VBFixedStringAttribute类

<VBFixedString(1)> Dim strChar1 As String