FormattableString 取代特定區域字符串

有些軟件系統是針對全球來開發的,因此一些字符串需要根據不同地區不同語言做出特定的處理。如果針對不同地區不同用語言分別編寫字符串處理方法的話代碼量是巨大的。那麼這個時候我們可以用到內插字符串深層的特性,C# 會把內插字符串的結果隱式的轉換成 string 或者 FormattableString 。
例如下面這個例子,內插字符串的結果將是 string 類型:

string message = $"我的名字叫 {name} ";

下面這段代碼內插字符串的結果將會被轉換爲 FormattableString 對象:

FormattableString message= $"我的名字叫 {name} ";

當我們聲明隱式類型的局部變量,並將內插字符串的結果賦值給它時,實際上內插字符串的結果會隱式轉換爲 string 類型。編譯器會根據應該輸出的信息所具有的運行期類型來產生不同的程序碼。用來創建字符串的程序碼部分會根據執行該程序的計算機所在位置來生成該區域的字符串格式。開發人員也可以利用編譯器類型判定機制來編寫生成 stritg 或 FormttableString 的代碼。

public static string ToGerman(FormattableString fts)
{
    return string.Format(null,System.Globalization("de-de"),fts.Format.fts.GetArguments());
}

上述代碼我們定義一個將字符串轉換爲德語格式的方法,它接受一個類型爲 FormattableString 的參數,返回一個字符串。我麼們可以在內插字符串結果上直接調用這個方法。當我們編寫類似的方法時需要有兩點需要注意:

  1. 不要給這些方法編寫以 string 類型作爲參數的重載,因爲如果存在 string 參數類型的重載編譯器會優先選擇以 string 類型爲參數的方法;
  2. 不能將這些方法設計爲可擴展的方法,因爲編譯器在判斷應該生成 string 還是 FormattableString 的時候會考慮字符串位於運算符的哪一側,如果位於左側就生成 string 。
  3. 更多文章請掃碼關注公衆號:“喵叔呦” 3Fn2bd.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章