簡體   English   中英

CultureInfo.CurrentCulture在String.Format()中是否真的必要?

[英]Is CultureInfo.CurrentCulture really necessary in String.Format()?

你認為在方法String.Format(string, object)提供IFormatProvider真的有什么必要嗎?

編寫完整變體是否更好

String.Format(CultureInfo.CurrentCulture, "String is {0}", str);

要不就

String.Format("String is {0}", str);

通常,如果要生成的字符串以與當前用戶文化無關的方式(例如,在注冊表中或文件中)保留,則需要使用InvariantCulture。

您將希望將CurrentCulture用於要在UI中呈現給當前用戶的字符串(表單,報表)。

如果您使用當前使用InvariantCulture的CurrentCulture,則會出現細微的錯誤:只有當您有多個不同文化的用戶訪問同一個注冊表項或文件,或者用戶更改其默認文化時,才會出現錯誤。

顯式指定CurrentCulture(如果省略IFormatProvider參數,則為默認值),本質上是文檔,表明您已經考慮了上述內容,並且生成的字符串應該使用當前用戶的文化。 這就是為什么FxCop建議你應該指定IFormatProvider參數。

如果未指定IFormatProvider (或等效地傳遞null ),則大多數參數類型最終將根據CultureInfo.CurrentCulture進行格式化。 有趣的是,您可以指定一個自定義的IFormatProvider ,它可以在格式化參數時獲得第一次破解,或者根據其他上下文覆蓋格式化文化。

請注意, CultureInfo.CurrentCulture會影響參數格式,而不會影響資源選擇; 資源選擇由CultureInfo.CurrentUICulture控制。

不,您不需要指定文化,除非您的字符串包含文化特定元素,如小數分隔符,貨幣等,必須根據文化呈現。

如果您關心應用程序中的本地化(全球化),它尤其有用。 也就是說,如果您希望您的應用支持多種語言和特定文化格式,那么您應該使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM