.NET 2.0 中带前导零的数字格式

Win*_*Too 4 vb.net

当应用程序使用 NET Framework 2.0 和 Visual Basic 时,我在格式化数字并将其转换为带有前导零的字符串时遇到问题。

我尝试:

Dim myNum = 12
Dim myStr as String

Dim myStr = myNum.ToString("0000")
or
Dim myStr = myNum.ToString("D4") 
Run Code Online (Sandbox Code Playgroud)

...为了得到想要的字符串:0012

请帮忙解决这个问题。

Han*_*ant 5

你有一个旧版本的 Visual Studio,但目前还没有Option Infer。或者没有开启。这使得myNum标识符成为 类型的变量Object

因此您的代码尝试调用 Object.ToString() 方法。它没有带参数的重载。编译器现在尝试利用您的代码,并且只能通过将 (“0000”) 或 (“D4”) 视为数组索引表达式来实现这一点。对 Object.ToString() 返回的字符串进行索引。温和地说,这有非常有趣的副作用。像“0000”这样的字符串不是有效的索引表达式,编译器会生成代码自动将其转换为整数。这适用于“0000”,转换为 0,结果是一个字符,只是“1”c。当然,将“D4”转换为整数效果不太好,那是一声响亮的爆炸声!

解决方案非常简单,只需显式命名变量的类型即可:

  Dim myNum As Integer = 12
  Dim myStr = myNum.ToString("D4")    '' Fine
Run Code Online (Sandbox Code Playgroud)

VB.NET 对动态类型的支持非常有名。它旨在帮助新程序员入门,事实上它是一种先进的技术,因为它可以以非常意想不到的方式表现出来。

普遍的建议总是相同的。让编译器帮你发现这样的错误。将其放在源代码文件的顶部:

 Option Strict On
Run Code Online (Sandbox Code Playgroud)