[英]Should I always specify which IFormatProvider to use?
我嘗試在我們的產品的幾個程序集上運行FxCop,並且我獲得了許多匹配“Specify IFormatProvider”規則。
碰巧,其中一些是合法的,但它也匹配這樣的代碼:
Logger.DebugFormat("Appending file {0}", fileName);
哪個可以寫成
Logger.DebugFormat(CultureInfo.InvariantCulture, "Appending file {0}", fileName);
第二種變體更難閱讀。
那么,它是否真的建議始終指定IFormatProvider
還是“只是”規則中使用的啟發式的限制?
它僅適用於具有IFormatProvider
重載的方法。
為了解決這個問題,我有兩個靜態類, InvariantText
和CulturedText
,分別使用不變文化和當前文化中的字符串。 例如,我在每個類中都有一個Format方法。 這樣,我可以進行文化中立和文化感知格式化,而無需每次都指定IFormatProvider
。
例:
InvariantText.Format("0x{0:X8}",value);
CulturedText.Format("Appending file {0}",file);
InvariantText.Format
和CulturedText.Format
只是String.Format
方法的包裝器,因此同樣返回字符串。
您甚至可以使用此模式來包裝需要文化中立和特定於文化的字符串的其他函數。 例如,創建兩個方法, InvariantLog
和CulturedLog
那套調用Logger.DebugFormat
在你的問題,並采取適當IFormatProvider
在每種情況下。
這取決於。 您知道應用程序的使用方式和位置,因此請考慮遵循MSDN建議:
PS:我相信FxCop
遵循第三條規則,讓你自己指定正確的文化。
該規則不是您代碼的唯一讀者。 如果您沒有明確指定格式化文化,維護開發人員將無法區分故意回退到默認格式文化(大多數情況下為CurrentCulture)或可能導致格式錯誤的遺漏。 如果您不喜歡詳細程度,請考慮使用Peter O提出的包裝方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.