.NET double.ToString线程安全吗?

我在生产ASP.NET应用程序中看到一个问题,它涉及以下代码,该代码用于呈现特定对象的地理坐标:

private double _longitude;
private double _latitude;

public string ToCsvString()
{
    return _latitude + "," + _longitude;
}

根据传入的请求,Thread.CurrentThread.CurrentCulture将被设置为不同的值。 我看到的行为是这个函数的结果会不同于线程本地文化。 有时小数点和逗号是不正确的当前文化。 更奇怪的是,一旦出现错误,错误的价值依然存在。

对双缓存值的ToString?


它不应该缓存这些值,特别是因为你提到的文化问题。 想到两件事:

  • 你如何/在哪里设定文化? 那里可能有一个bug?
  • 你确定它是创建的bug 这个地方? 也许文化与你想象的不一样? 也许这个函数的结果被缓存在代码的其他地方?

  • 为什么不使用显式的ToString方法来让你手动指定一个区域性的IFormatProvider?


    为了呈现地理坐标,我建议您最好定义自己的固定格式或文化,而不要将其留给运行线程的框架,默认文化设置或文化信息。

    我会这样做,将其格式化为4个小数点:

    return _latitude.ToString("0.0000") + "," + _longitude.ToString("0.0000");
    

    要么

    string.Format("{0:0.0000}, "{1:0.0000}", _latitude, _longitude);
    

    或者如果你想要小数分隔符是文化特定的,

    CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo("en-AU");
    return _latitude.ToString("N4", ci) + "," + _longitude.ToString("N4", ci);
    
    链接地址: http://www.djcxy.com/p/75091.html

    上一篇: Is .NET double.ToString threadsafe?

    下一篇: CA1305: int.Parse(String)