我遇到了一个非常奇怪的问题,我的软件只有一个用户。
如标题所述,我收到以下错误:
Conversion from string "-1" to type 'Integer' is not valid.
at Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
应用程序中的一些旧代码使用VB调用GetSettings来检索注册表信息,下面是它的签名以及在应用程序中使用的示例:
Public Function GetSetting(ByVal AppName As String, ByVal Section As String, ByVal Key As String, Optional ByVal Default As String = "") As String
在应用程序的较旧(8年+)部分使用以下内容:
GetSetting("My App", "Section", "Key", "-1")
因此,如果未找到注册表项,GetSettings将返回字符串“-1”。在代码中,这主要用于以下...
Dim regValue as Integer = GetSetting("My App", "Section", "Key", "-1")
...没有任何类型转换为像CInt这样的整数(GetSetting(“我的应用程序”,“部分”,“密钥”,“ - 1”))等等。我意识到这可能是错误的编码实践,但是,在VB.net中,只要赋值是有效的(即GettSetting的默认值实际上是一个有效整数的字符串而不是“adasd”或“”)它应该工作(我意识到这不是c#中的情况)成功编译需要演员表。)
为了进一步测试,我已进入我的注册表并将所有键设置为-1以及完全删除所有键(以便使用默认值)并且无法重现该问题。我能够重现类似错误的唯一方法是将其中一个注册表项设置为“-1”(使用键值中的引号)并收到几乎完全相同的错误:
Conversion from string ""-1"" to type 'Integer' is not valid.
然而,这是有道理的,因为添加的引号(“-1”vs“”-1“”),注册表值不再是有效整数。
每天有大约3000人使用该应用程序,除了这一个用户之外没有其他人遇到此问题,此代码在8年以上也没有变化(较新的代码不再使用该注册表)。 / p>
我已尝试在用户计算机上重新安装.NET和应用程序,以及在用户控制面板中查找任何奇怪的区域设置等,但尚未能够找到问题的解决方案。
非常感谢任何见解。
谢谢!
答案 0 :(得分:3)
Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger
方法使用区域设置来解析字符串。确保以下注册表项的值正确无误:HKEY_CURRENT_USER\Control Panel\International\sNegativeSign