這個建議我讀了兩次才明白啊。 1、實現IFormattable接口實現ToString()輸出格式化字符串 一般我們為類型提供格式化字符串的輸出的做法是重寫ToString(),但是這種方法提供的字符串輸出是非常單一的,所以我們可以實現IFormattable接口的ToString方法,可以讓類型根據用戶的輸入而格式化輸出,因為重寫的ToString方法沒有參數,而實現 IFormattable接口的的ToString方法有參數,還是看代碼最清晰。 復制代碼 public class Person : IFormattable { public string FirstName { get; set; } public string LastName { get; set; } //重寫的ToString方法輸出字符串比較單一 public override string ToString() { return string.Format("{0},{1}", FirstName, LastName); } //實現IFormattable接口的ToString方法因為有參數,所以可以實現復雜的邏輯 public string ToString(string format, IFormatProvider formatProvider) { if (format == "ch") return string.Format("中文名字:{0},{1}", FirstName, LastName); else return string.Format("EnglishName:{0},{1}", FirstName, LastName); } } 復制代碼 這樣子調用: Person p = new Person() { FirstName="wayne", LastName="chan" }; Response.Write(p.ToString()); Response.Write(p.ToString("ch",null)); Response.Write(p.ToString("english", null)); 2、格式化器 上面的方法是在預見類型會存在格式化字符串輸出的需求的時候,提前為類型實現了接口IFormattable,如果類型本身沒有提供格式化字符串輸出的功能,這時“格式化器”就派上用場了。 復制代碼 //針對Person的格式化器 class PersonFormatter : IFormatProvider, ICustomFormatter { //IFormatProvider成員 public object GetFormat(Type formatType) { if (formatType == typeof(ICustomFormatter)) return this; else return null; } //ICustomFormatter成員 public string Format(string format, object arg, IFormatProvider formatProvider) { Person person = arg as Person; if (person == null) return string.Empty; switch (format) { case "Ch": return string.Format("{0}{1}", person.LastName, person.FirstName); case "Eg": return string.Format("{0}{1}", person.FirstName, person.LastName); default: return string.Format("{0}{1}", person.FirstName, person.LastName); } } } 復制代碼 一個典型的格式化器應該要實現IFormatProvider, ICustomFormatter 接口,如果使用的話,就先初始化一個格式化器,如下: Person person = new Person() { FirstName = "wayne", LastName = "chan", IDCode = "aaaa" }; //初始化格式化器 PersonFormatter pFormatter = new PersonFormatter(); Response.Write(pFormatter.Format("Ch", person, null)); 其實看到這裡,我覺得這個建議已經是非常細致的.NET知識了,一般人遇到這種情況,直接就會使用上一種方法了,在看書的時候,我也想直接跳過算了,但最後想,還是把他也記錄下吧,畢竟這也是對自己的提高啊,即使以後還是會把這個知識點遺忘掉,還是可以在本博客找回來啊。