簡體   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