为什么System.Convert("0")在某些系统上抛出FormatException?

pom*_*roy 2 c# crash formatexception

该代码在针对.NET3.5的VS2008中编译.这在我的系统上是不可重现的.我怀疑某种本地化设置正在发挥作用,但我对此并不了解.

所有其他有效数字似乎工作正常.该代码说明了该错误(导致相同的异常,但不是生产代码):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = "";
            do
            {
                str = Console.ReadLine();
                Console.WriteLine("\t\"{0}\"", Convert.ToDouble(str));
            }
            while (str != null);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在命令行,输入"0"会在我遇到的至少一个系统上崩溃应用程序.

来自用户PC的堆栈跟踪:

System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   at System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
   at System.Convert.ToDouble(String value)
Run Code Online (Sandbox Code Playgroud)

Sam*_*m B 5

如果您的问题与当前区域性有关,请尝试使用不变区域性转换为 Double:

Convert.ToDouble("0", System.Globalization.CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 5

我从一段时间的问题中记住了这个问题.Parse()方法受控制面板+区域和语言小程序中的用户覆盖的影响.IIRC,它对"负号符号"设置特别敏感.请您的用户更正其中的设置.

参考问题在这里.