C#中如何在string.Join()指定InvariantCulture拼接double数组
解决方案
问题原因
string.Join直接拼接值类型集合时,默认调用当前线程区域文化对应的格式化规则处理数值。德语区域文化中以逗号作为小数分隔符,因此0.001会被格式化为0,001,输出结果不符合预期。
实现代码
两种写法均仅需修改原拼接逻辑的1行代码,即可全程保持InvariantCulture格式,不受系统区域设置影响:
- .NET 5及以上版本,可直接使用带区域文化参数的
string.Join重载,代码最精简:
using System.Globalization; XElement element = new("TestNode"); double[] myDoubleArray = new double[2] { 0.001, 1.0 }; var stringValue = string.Join(CultureInfo.InvariantCulture, " ", myDoubleArray); element.Add(new XAttribute("Values", stringValue));
- 全版本兼容写法,通过LINQ逐元素按InvariantCulture格式化后拼接:
using System.Globalization; using System.Linq; XElement element = new("TestNode"); double[] myDoubleArray = new double[2] { 0.001, 1.0 }; var stringValue = string.Join(" ", myDoubleArray.Select(d => d.ToString(CultureInfo.InvariantCulture))); element.Add(new XAttribute("Values", stringValue));
输出结果
修改后固定输出如下内容,不会随系统语言变化:
<TestNode Values="0.001 1" />
内容的提问来源于stack exchange,提问作者skm
相关产品推荐
相关产品推荐

