当前位置:  开发笔记 > 编程语言 > 正文

C#将字符串"0"解析为整数

如何解决《C#将字符串"0"解析为整数》经验,为你挑选了1个好方法。

我有一台新的笔记本电脑在工作,本周早些时候工作的代码今天不起作用.

以前工作的代码是简化的:

while (dr.Read())
{
    int i = int.Parse(dr.GetString(1))
}

现在它在数据库值为0时失败.有时,但不可靠,这将起作用:

while (dr.Read())
{
    int i = Convert.ToInt32(dr["FieldName"]))
}

我错过了一些愚蠢的东西吗?

奇怪的是,ReSharper也遇到了大量奇怪的错误,我使用上面的代码得到了相同的错误信息:"输入字符串的格式不正确." (在我加载项目之前开始.)

有任何想法吗?任何有SP问题的人?当我拿到机器时,我确实试图确保所有的SP都是最新的.

编辑:我知道如何使用Try.Parse和错误处理.这里的代码是简化的.我正在从数据库表中读取测试用例.此列仅包含0,1和2值.我已经证实了这一点.我打破了这一点,将数据库字段放入字符串变量s然后尝试int.Parse(s).该代码本周早些时候工作,数据库没有改变.唯一改变的是我的环境.

为了完全简化问题,这行代码抛出异常("输入字符串格式不正确"):

 int.Parse("0");

编辑:感谢大家帮我解决这个问题!解决方案是强制重置我的语言设置.



1> John Rasch..:

一个可能的解释:

基本上,问题是HKEY_CURRENT_USER\Control Panel\International下的sPositiveSign值设置为0,这意味着正号为'0'.因此,在解析"正号0"时,正在将字符串("")的其余部分解析为数字,这当然不起作用.这也解释了为什么int.Parse("00")不是问题.虽然您无法通过控制面板将正号设置为"0",但仍可以通过注册表执行此操作,从而导致出现问题.不知道帖子中用户的电脑如何以错误的设置结束......

更好的是,你机器上的输出是多少:

Console.WriteLine(System.Globalization.NumberFormatInfo.GetInstance(null).PositiveSign);

0当我打印出一个+标志时,我愿意打赌你打印出来......

我建议检查你的Control Panel > Regional and Language Options设置...如果它们显得正常,尝试将它们改为其他东西,而不是回到你正在使用的任何语言(我假设英语).


令人印象深刻的通灵调试!+1
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有