C# IFormattable 接口重写

 1  public class Racer : IComparable<Racer>, IFormattable
 2   {
 3     public int Id { get; private set; }
 4     public string FirstName { get; set; }
 5     public string LastName { get; set; }
 6     public string Country { get; set; }
 7     public int Wins { get; set; }
 8 
 9     public Racer(int id, string firstName, string lastName, string country = null, int wins = 0)
10     {
11       this.Id = id;
12       this.FirstName = firstName;
13       this.LastName = lastName;
14       this.Country = country;
15       this.Wins = wins;
16     }
17 
18     public override string ToString()
19     {
20       return String.Format("{0} {1}", FirstName, LastName);
21     }
22 
23     public string ToString(string format, IFormatProvider formatProvider)
24     {
25       if (format == null) format = "N";
26       switch (format.ToUpper())
27       {
28         case "N": // name
29           return ToString();
30         case "F": // first name
31           return FirstName;
32         case "L": // last name
33           return LastName;
34         case "W": // Wins
35           return String.Format("{0}, Wins: {1}", ToString(), Wins);
36         case "C": // Country
37           return String.Format("{0}, Country: {1}", ToString(), Country);
38         case "A": // All
39           return String.Format("{0}, {1} Wins: {2}", ToString(), Country, Wins);
40         default:
41           throw new FormatException(String.Format(formatProvider,
42                 "Format {0} is not supported", format));
43       }
44     }
45 
46     public string ToString(string format)
47     {
48       return ToString(format, null);
49     }
50 
51     public int CompareTo(Racer other)
52     {
53       int compare = this.LastName.CompareTo(other.LastName);
54       if (compare == 0)
55         return this.FirstName.CompareTo(other.FirstName);
56       return compare;
57     }
58   }

 

posted @ 2016-10-18 11:43  指间的徘徊  阅读(386)  评论(0编辑  收藏  举报