无需解析数值类型,如何实现string.Join的文化不变式输出?
解决多语言环境下数值ToString的文化差异问题
直接用Convert.ToString配合CultureInfo.InvariantCulture格式化object即可,不用提前解析数值类型,就能保证所有环境下输出和英文环境一致:
修改后的代码:
using System.Globalization; var dict = new Dictionary<int, object>() { { 1, "abc" }, { 2, "def" }, { 3, 33 }, { 4, 44 }, { 5, 5.5 }, { 6, 6.6 } }; return string.Join(",", dict.Values.Select(x => x == null ? "null" : Convert.ToString(x, CultureInfo.InvariantCulture)));
原理说明
Convert.ToString(x, CultureInfo.InvariantCulture)会强制用与语言无关的固定格式处理所有类型:数值类型会用.作为小数分隔符,字符串类型直接返回原内容,空值逻辑保持你原来的判断。- 不需要额外判断x是不是double、float或decimal类型,这个方法会自动适配不同的object实例,同时避免当前线程文化(比如法语、西班牙语)对数值格式化的影响。
不管在什么语言环境下,运行这段代码都会得到和英文环境一致的结果:abc,def,33,44,5.5,6.6
内容的提问来源于stack exchange,提问作者DevMindzz
相关产品推荐
相关产品推荐

