如何在vb.net中声明固定长度的字符串而不增加赋值期间的长度

时间:2013-06-08 06:59:52

标签: vb.net

我有一个固定长度的字符串变量:

<VBFixedString(10)>
Public myVar As String

当我将var赋值给具有11个字符的值时,var会改变长度。

这就是我得到的:

  myvar = "1234567890ABCD" ' result = myvar being "1234567890ABCD"

我想要的是myvar:“1234567890”

然后如果小于10我想

myvar = "12345" to be "12345     "

我可以用PadLeft PadRight做到这一点,但我想知道我是否可以将它声明为固定长度,它会为你处理所有这些。

2 个答案:

答案 0 :(得分:2)

根据我的理解,VBFixedString属性仅被某些基于文件的方法识别,以帮助构建写入/读取文件的内容。编译器不会将该属性用于其他任何事情,包括改变编译变量赋值的方式。

取自MSDN:

  

VBFixedStringAttribute是信息性的,不能用于   将可变长度字符串转换为固定字符串。的目的   这个属性是修改结构和非本地字符串的方式   变量由识别的方法或API调用使用   VBFixedStringAttribute。请记住,此属性不会   改变字符串本身的实际长度。

最后一句是重要的一点:

  

请记住,此属性不会更改字符串本身的实际长度。

http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.vbfixedstringattribute.aspx

编辑1:

一个关于如何根据固定长度自动填充字符串的简单示例:

Function FixedLengthString(ByVal value As String, ByVal totalLength As Integer, ByVal padding As Char) As String
        Dim length = value.Length
        If (length > totalLength) Then Return value.Substring(0, totalLength)
        Return value.PadRight(totalLength, padding)
End Function

在这里你可以传入一个字符串,如果字符串的长度大于指定的总长度,你将得到一个匹配该长度的字符串。任何更少的东西,你将得到字符串加上填充字符达到指定的总长度。

这可以通过错误检查来改进,并且可能使该方法成为扩展方法,因此您不必传递“value”。

答案 1 :(得分:2)

来自旧学校,LSET将完全按照您的要求行事。

 myvar = lset("1234567890ABCD",10)

结果为“1234567890”,而

 myvar = lset("12345",10)

导致“12345_ _ _” - 抱歉,编辑器在12345替换为下划线后修剪了空格

请参阅MSDN entry for LSET