2

XElement と Culture に問題があります。

私の地元の文化はフランス語です。浮動小数点値は、ポイントの代わりにカンマで記述されます。

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;
4

2 に答える 2

7

XML 仕様では、データをフォーマットする方法が記述されています。そのため、XElementは独自のカルチャを使用しません。XML 仕様に従います (実際には と同じですInvariantCulture) 。

これが、キャストXElementdouble機能する場合とdouble.Parse機能しない理由でもあります。ローカルのフォーマットではなく、XML 仕様のフォーマットに従います。

于 2013-10-16T15:03:45.760 に答える