今天,用C#寫程序操作Excel,讀取單元格內容根據所需格式生成字符串,使用String.Format(string format,object arg0)方法。以前只知“{0}”為索引占位符(即格式項),與參數列表中的第一個對象相對應,格式設置過程將每個格式項替換為對應對象的值的文本表示形式。但這次需將參數對象格式成一對大括號括起來的格式,即返回字符串“{對象arg0的文本表示形式}”。
//直接加大括號
String.Format("{{0}}",1);//{0}
如果使用上面語句,並不能獲得所需結果“{1}”,因為左大括號和右大括號被解釋為格式項的開始和結束,如果要在format參數中指定大括號字符,須使用轉義序列顯示文本左大括號或右大括號。在格式化字符串中這個轉義字符還是大括號本身。因此,在固定文本中指定兩個左大括號(“{{”) 以顯示一個左大括號(“{”),或指定兩個右大括號(“}}”) 以顯示一個右大括號(“}”)。
//本例的一種正確方式
String.Format("{{{0}}}",1);//{1}
按照在format中遇到大括號的順序依次解釋它們,不支持解釋嵌套的大括號。雖然上面能得到正確結果,但解釋轉義大括號的方式會導致意外的結果。例如,考慮要顯示一個左大括號、一個格式化為十進制數的數值和一個右大括號的格式項“{{{0:D}}}“。但是,實際是按照以下方式解釋該格式項:
1、前兩個左大括號("{{") 被轉義,生成一個左大括號;
2、之後的三個字符("{0:") 被解釋為格式項的開始。
3、下一個字符("D") 將被解釋為Decimal 標准數值格式說明符,但後面的兩個轉義大括號("}}") 生成單個大括號。由於得到的字符串("D}") 不是標准數值格式說明符號,所以得到的字符串會被解釋為用於顯示字符串“D}”的自定義格式字符串。
4、最後一個大括號("}") 被解釋為格式項的結束。
5、顯示的最終結果是字符串“{D}”。不會顯示本來要格式化的數值。
在編寫代碼時,避免錯誤解釋轉義大括號和格式項的一種方法是單獨格式化大括號和格式項。也就是說,在第一個格式化操作中顯示文本左大括號,在下一操作中顯示格式項的結果,然後在最後一個操作中顯示文本右大括號。
//正確無誤的形式
String.Format("{0}{1}{2}","{",1,"}");//{1}
作者 tht2009