gpt4 book ai didi

c# - 如何让C#默认写英文(非本地化)数字格式?

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:41 26 4
gpt4 key购买 nike

我在英文版 Windows 7 上使用英文版 Visual Studio 2008,但我住在荷兰。我的很多程序都需要读写 float 。与英语相比,荷兰语的数字符号转换了点和逗号的含义(即荷兰语中的 1.001 是一千零一,而 1,001 是 1 + 1/1000)。我永远不会用荷兰语格式写(或读)数字,但出于某种原因,我编译的每个程序都默认使用它,所以每个 ToString() 都是错误的。这让我每次。我知道我可以把它放在每个线程的开头:

System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture("en-US");

或者将 ToString() 的每个实例替换为:

String.Format(CultureInfo.InvariantCulture, "{0:0.####},{1:0.####}", x)

但有时我只是想编译一些东西看看它是如何工作的,而不是做任何改变。另外,有时我一定会忘记这一点。有没有办法让 C#、.NET 和/或 Visual Studio 始终让我的所有项目/程序都使用英文数字格式?

最佳答案

这不是编译的问题 - 这是执行时发生的事情的问题。除非您明确指定文化,否则将使用当前文化(在执行时)。没有办法改变我所知道的这种行为,这让你有以下选择:

  • 明确说明要使用的文化
  • 明确改变当前文化

请注意,即使您更改了当前 线程的当前区域性,也可能不会影响诸如线程池之类的东西。我个人认为最好始终明确使用文化。

您始终可以编写自己的扩展方法来(比如说)调用原始版本但传入 CultureInfo.InvariantCulture。例如:

public static string ToInvariantString(this IFormattable source, string format)
{
return source.Format(format, CultureInfo.InvariantCulture);
}

无可否认,在任何地方都做到正确......并且为了避免装箱,您实际上需要一个稍微不同的签名:

public static string ToInvariantString<T>(this T source, string format)
where T : IFormattable
{
return source.Format(format, CultureInfo.InvariantCulture);
}

关于c# - 如何让C#默认写英文(非本地化)数字格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4015338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com