.net 如何更改Object.ToString使用的区域性?

.net 如何更改Object.ToString使用的区域性?,.net,string-formatting,globalization,tostring,.net,String Formatting,Globalization,Tostring,写起来很乏味 string msg = "Result is " + r.ToString(CultureInfo.InvariantCulture) + " with " + p.toString(CultureInfo.InvariantCulture) + "% probability."; 我宁愿 string msg = "Result is " + r + " with " + p + "% probability."; 如何在整个项目中将InvariantCulture

写起来很乏味

string msg = "Result is " + r.ToString(CultureInfo.InvariantCulture) + " with "
    + p.toString(CultureInfo.InvariantCulture) + "% probability.";
我宁愿

string msg = "Result is " + r + " with " + p + "% probability.";
如何在整个项目中将
InvariantCulture
设置为默认值


我的目标是生成程序员可读的输出。

您需要为其设置当前线程和ui线程区域性:

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;

您的示例显示了显示文本的格式,因此您应该信任纯版本的
ToString()
来根据当前区域性设置对象的格式。因此,根本不指定区域性。别担心,这是命中注定的

InvariantCulture
应保留用于构造用于控制逻辑的字符串而不是显示字符串的情况。例如,请参见确认这一点的示例

如果出于某种模糊的原因,您确实不希望显示字符串中有任何变化,那么您可以指定区域性、任何区域性(例如
Thread.CurrentThread.CurrentCulture=new CultureInfo(“en-US”);
),但不能指定
InvariantCulture