2016-05-12 40 views
1

我有一個C#表單應用程序。作爲其功能的一部分,它以字符串格式向文件寫入雙值,其中一些是double.Infinity。C#:處理Windows 10上Convert.ToDouble('Infinity')的格式異常

還有另一部分應用程序從文件讀取這些值並將它們轉換回雙倍。

當在Windows 7上執行寫入值部分並在Windows 10上讀取相同的文件時,在轉換'無窮大'時出現格式異常。它顯示默認(us-en)文化使用的符號在Windows 8和10之間更改。

在應用程序中有很多Convert.ToDouble()實例,並通過try-catch或使用double.tryParse()不是一個可行的解決方案,因爲它需要在許多項目中進行更改。

有沒有什麼解決方法可以避免這種格式異常問題?

由於提前,

卡皮爾

+3

那麼,這是一個滴答作響的定時炸彈。不是唯一的問題,例如,當程序跨越小數點以逗號書寫的邊界移動時,數據變成亂碼。如果您不想更改解析代碼以使用帶有NumberFormat參數的Parse/TryParse重載,就像您應該那樣,那麼您必須使用自己的文化來更改Thread.CurrentCulture屬性。使用您的首選Negative/PositiveInfinitySymbol值的自定義NumberFormatInfo。 –

+0

感謝漢斯。在初始化應用程序時定製當前文化,設置預期無窮大常量;它已經工作。 –

回答

0

這種處理數據庫和存儲在其他文化中數據量太大時,是一個更大的問題。我們最初有一個問題,西班牙語版本的軟件不能正確讀取無窮大,並將無窮大存儲爲符號,而不是單詞。即使在試圖強迫英國文化時,它似乎也被打破了。

然後,我們看到這個問題在英語文化中出現在Windows 10上,現在無窮大符號現在會保存在數據庫中。此問題有可能導致Windows版本和跨文化問題。 要做的最安全的事情是使用CultureInfo.InvariantCulture存儲和檢索數據,無論是在文件還是數據庫中。這樣它將永遠如你所願。

如果您在文件/數據庫中已經有問題,那麼您可以運行一個相當簡單的腳本來查找'Double |∞'並將其替換爲不變類型的'Double | Infinity'。 這將爲您節省未來的問題