在.NET 2.0中带有前导零的格式编号

时间:2014-11-01 09:20:47

标签: vb.net

当应用程序使用带有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

请帮助解决这个问题。

1 个答案:

答案 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