您認爲在方法String.Format(string, object)
中提供IFormatProvider
真的有必要嗎?CultureInfo.CurrentCulture在String.Format()中真的需要嗎?
是更好地寫滿變種
String.Format(CultureInfo.CurrentCulture, "String is {0}", str);
或只是
String.Format("String is {0}", str);
?
您認爲在方法String.Format(string, object)
中提供IFormatProvider
真的有必要嗎?CultureInfo.CurrentCulture在String.Format()中真的需要嗎?
是更好地寫滿變種
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
控制。
如何定義自定義IFormatProvider - http://www.csharp-examples.net/custom-iformatprovider/ – 2011-02-03 16:41:32