3 回答

TA貢獻1859條經(jīng)驗 獲得超6個贊
當數(shù)字,日期和時間格式化為字符串或從字符串中解析時,將使用區(qū)域性來確定其完成方式。例如,在主流en-US
文化中,您具有以下字符串表示形式:
1,000,000.00-一百萬,兩位小數(shù)
1/29/2013-發(fā)布日期
在我的文化(da-DK
)中,值具有以下字符串表示形式:
1.000.000,00-一百萬,兩位小數(shù)
2013年1月29日-發(fā)布日期
在Windows操作系統(tǒng)中,用戶甚至可以自定義數(shù)字和日期/時間的格式,還可以選擇操作系統(tǒng)以外的其他區(qū)域。所使用的格式是用戶的選擇方式,應(yīng)該是這樣。
所以,當你格式化值使用被顯示給用戶,例如ToString
或String.Format
或使用從字符串解析DateTime.Parse
或Decimal.Parse
默認是使用CultureInfo.CurrentCulture
。這允許用戶控制格式。
但是,許多字符串格式設(shè)置和解析實際上不是應(yīng)用程序和用戶之間交換的字符串,而是應(yīng)用程序和某些數(shù)據(jù)格式(例如XML或CSV文件)之間交換的字符串。在那種情況下,您不想使用,CultureInfo.CurrentCulture
因為如果格式化和解析是使用不同的區(qū)域性進行的,則它可能會中斷。在這種情況下,您要使用CultureInfo.InvariantCulture
(基于en-US
區(qū)域性)。這樣可以確保值可以無問題地往返。
該ReSharper的給你警告的原因是,一些應(yīng)用程序編寫者不知道這種區(qū)別可能導致意想不到的結(jié)果,但他們從來沒有發(fā)現(xiàn)這一點,因為他們CultureInfo.CurrentCulture
就是en-US
具有相同行為CultureInfo.InvariantCulture
。但是,一旦在另一種區(qū)域性中使用了該應(yīng)用程序,就有機會使用一種區(qū)域性進行格式化而另一種區(qū)域性用于解析該應(yīng)用程序。
總結(jié)一下:
CultureInfo.CurrentCulture
如果要格式化或解析用戶字符串,請使用(默認)。使用
CultureInfo.InvariantCulture
如果格式化或解析應(yīng)該由一個軟件是解析的字符串。由于用戶無法控制格式化和解析的方式,因此很少使用特定的國家文化。
- 3 回答
- 0 關(guān)注
- 964 瀏覽
添加回答
舉報