【问题标题】:Conversion from string "-1" to type 'Integer' is not valid, but the String value IS a valid int从字符串“-1”到类型“整数”的转换无效,但字符串值是有效的 int
【发布时间】:2014-02-07 03:27:49
【问题描述】:

我遇到了一个非常奇怪的问题,我的软件只有一个用户。

如标题所述,我收到以下错误:

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("My App", "Section", "Key", "-1")) 等。我意识到这可能是不好的编码习惯,但是,在 VB.net 中,只要赋值有效(即 GettSetting 的默认值实际上是一个有效整数的字符串,而不是“adasd”或“”,例如)它应该可以工作(我意识到在 c# 中不是这种情况成功编译需要强制转换)。

为了进一步测试这一点,我进入了我的注册表并将所有键设置为 -1 并完全删除了所有键(以便使用默认值)并且无法重现该问题。我能够重现类似错误的唯一方法是将其中一个注册表项设置为“-1”(在键值中使用引号)并收到几乎完全相同的错误:

Conversion from string ""-1"" to type 'Integer' is not valid.

这是有道理的,但是,由于添加了引号(“-1”与“”-1””),注册表值不再是一个有效的整数。

每天有大约 3000 人使用该应用程序,除此用户外,没有其他人遇到此问题,此代码也已 8 年多未更改(新代码不再使用注册表)。

我已尝试在用户计算机上重新安装 .NET 和应用程序,以及在用户控制面板中查看任何奇怪的区域设置等,但尚未找到解决问题的方法。

任何见解将不胜感激。

谢谢!

【问题讨论】:

  • 对于那个用户来说,它是否始终如一地重现,或者即使对于那个用户来说也是零星的?
  • 它与用户一致,并且发生在使用 GetSettings 调用的每种形式中。肯定是头疼。
  • 如果你编写一个测试应用程序,它什么都不做,只调用Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger("-1") 并让该用户运行它。有这种可能吗?如果是这样,我很想知道在那种情况下会发生什么。
  • 可能值得查看违规用户的区域设置中的数字格式。
  • 您能否查看并查看他们计算机上以下注册表项的值:HKEY_CURRENT_USER\Control Panel\International\sNegativeSign

标签: .net vb.net exception casting


【解决方案1】:

Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger 方法使用区域设置来解析字符串。确保以下注册表项的值正确:HKEY_CURRENT_USER\Control Panel\International\sNegativeSign

【讨论】:

  • 只是为了添加更多信息:在我的情况下,sNegativeSign 键设置为空白(空字符串?null? - 不确定注册表在这种情况下使用什么,所以我会称其为空白)这导致了我的问题。我在区域设置下的控制面板中进行了尝试,并尝试更改 UI 中负号的值,以尝试将空白保存到注册表中,但未成功。我想这可能是一个单独的问题,但我不知道我的一个用户(不太精通计算机)会如何更改此注册表值。很奇怪。
  • 该死,我必须是第一个回答这个问题的人!该死的移动互联网:-P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多