当应用程序使用带有Visual Basic的.NET framework 2.0时,我有问题格式化数字并将其转换为带前导零的字符串。
我试试:
Dim myNum = 12
Dim myStr as String
Dim myStr = myNum.ToString("0000")
or
Dim myStr = myNum.ToString("D4")
...为了得到想要的字符串:0012
请帮助解决这个问题。
答案 0 :(得分:3)
您有一个旧版本的Visual Studio,还没有Option Infer
。或者它没有打开。这使得 myNum 标识符成为Object
类型的变量。
所以你的代码试图调用Object.ToString()方法。哪个没有带参数的重载。编译器现在尝试干扰您的代码,并且只能通过将(“0000”)或(“D4”)视为数组索引表达式来实现。索引Object.ToString()返回的字符串。说得温和,这有非常有趣的副作用。像“0000”这样的字符串不是有效的索引表达式,编译器会生成代码以自动将其转换为Integer。这适用于“0000”,转换为0,结果是字符,只是“1”c。将“D4”转换为整数当然不是很好,那是一个响亮的Kaboom!
解决方案非常简单,只需明确命名变量的类型:
Dim myNum As Integer = 12
Dim myStr = myNum.ToString("D4") '' Fine
VB.NET对动态类型的支持非常/着名。为了帮助新程序员入门,它实际上是一种先进的技术,因为它可以用非常意想不到的方式表现出无数种方式。
普遍的建议总是一样的。让编译器帮助您捕获这样的错误。将它放在源代码文件的顶部:
Option Strict On