繁体   English   中英

C#-XElement与文化

[英]C# - XElement and Culture

我在XElement和文化方面遇到问题。

我的本地文化是法国。 浮点值用逗号而不是点写。

Console.WriteLine(1.1d);
//1,1

但是,当我在XElement中放入一个double时,它以美式格式存储。

XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
Console.WriteLine(myXmlElement.Value);
//1.1

因此,当我尝试解析XElement的值时,会收到FormatException。

XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = double.Parse(myXmlElement.Value);
//Throws a FormatException

我发现这种行为确实很奇怪。 当我编写XDoucment时,它不是以应用程序或线程的文化来编写的,而是总是以美国文化来编写的。 我想念什么吗? 我有一些解决方法可以按照我期望的方式运行,但是我发现它们不是很“干净”。

//This will work
XElement myXmlElement = new XElement("ADoubleElement", 1.1d.ToString());
double myDouble = double.Parse(myXmlElement.Value);
//This will also work but if I write XElement, it will not have the correct Culture
XElement myXmlElement = new XElement("ADoubleElement", 1.1d);
double myDouble = (double)myXmlElement;

XML规范描述了数据应如何格式化,这就是XElement不使用您的区域性的原因-它遵循XML规范(实际上可能与InvariantCulture相同)

这也是为什么将XElement强制转换为doubledouble原因double.Parse不能:它遵循XML规范格式而不是本地规范格式。

在转换为字符串或从字符串转换时, XElement将始终使用InvariantCulture
XML是用于序列化数据的,在跨文化迁移时,您不希望它中断。

默认情况下, Parse()ToString()使用CurrentCulture
这是因为这些功能是在与希望以常规方式查看数字的用户交互时使用的。

调用Parse()ToString()时,应始终明确传递一种区域性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM