我有一些VB6代码需要迁移到VB.NET,我想询问一下这行代码,看看是否有办法在.NET中实现它
Dim strChar1 As String * 1
智能感知不断告诉我声明即将结束。
这就是所谓的“固定长度”字符串。 VB.NET 中没有完全等效的东西。
Edit: 嗯,好的,有VB固定字符串属性 http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbfixedstringattribute.aspx,但我很确定它的存在只是为了让自动迁移工具可以更轻松地将 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 不知道要从文件中读取多少个字符,因为String
通常可以有任意数量的字符。
在 VB.NET 中,您可以根据需要执行以下操作之一:
-
如果长度很重要(例如,您需要从某些数据源读取一个字节),请考虑使用数组,例如
Dim aSingleByteArray(1) As Byte
-
或者,您可以使用其中之一Stream http://msdn.microsoft.com/en-us/library/system.io.stream.aspx类。特别是,如果您正在从网络套接字或文件读取数据,请考虑使用网络流 http://msdn.microsoft.com/en-us/library/system.net.sockets.networkstream.aspx or 文件流 http://msdn.microsoft.com/en-us/library/system.io.filestream.aspx, 分别。 AStream用于逐字节访问(即原始二进制访问)。流阅读器 http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx是一个相关的类,它简化了基于文本的数据的读取,因此,例如,如果您正在读取文本文件,这可能会很好。否则(如果处理二进制数据),坚持使用其中之一Stream类。
-
如果长度不重要,你可以使用“正常”String
。也就是说:
Dim aNormalString As String
哪个答案是“正确的”实际上取决于为什么在原始 VB6 代码中这样声明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)