[C#] 更精簡的 string.Format 表示法:內插字串

  • 12050
  • 0
  • C#
  • 2016-07-13

string.Format這個方法,有寫過C#的人應該都很熟悉。但string.Format如果在很多參數時,常常程式碼要分個兩三行才會比較好閱讀,但程式碼看起來就會有點雜亂。

例子

C# 6.0針對string.Formt提供了新的表示方式,直接看下面的例子。

string message = string.Format("歡迎 {0},現在日期 {1:yyyy/MM/dd}"
                               , Name
                               , DateTime.Now);

上面就是之前常見的用法,C# 6.0的新表示方法是

string message = $"歡迎 {Name},現在日期 {DateTime.Now:yyyy/MM/dd}";

相較之下,是不是簡潔多了,程式碼長度縮短了三分之一左右! 

使用規定

C# 6.0的新表示方法有幾點要注意的地方:

  • 以「錢字號 ($)」開頭
  • 將原先的號碼直接用變數取代
  • 變數後方還是可以格式化呈現方式,如:小數點位數,時間格式化字串

結語

最讓我有感的就是搭配log4net的使用。以log4net的紀錄錯誤的方法有兩個,一個是Error,另一個是ErrorFormat。如下表示

try
{
    DoSomething();
}
catch (Exception e)
{
    //Error可紀錄Exception物件,但不能格式化
    _log.Error("儲存失敗", e);

    //ErrorFormat可以格式化,但不能紀錄Exception物件
    _log.ErrorFormat("儲存{0}失敗", _storePath);

    //兩全其美的方法,但程式碼很雜亂
    _log.Error(string.Format("儲存{0}失敗", _storePath), e);

    //兩全其美的方法,相對程式碼比較簡潔
    _log.Error($"儲存{_storePath}失敗", e);
}