Item 5: Always Provide ToString()(Effective C#)

  1  using  System;
  2  using  System.Collections.Generic;
  3  using  System.Linq;
  4  using  System.Text;
  5 
  6  namespace  EffectiveCSharpItem5
  7  {
  8       public   class  Customer : IFormattable
  9      {
 10           public   string  Name
 11          {
 12               get ;
 13               set ;
 14          }
 15 
 16           public   decimal  Revenue
 17          {
 18               get ;
 19               set ;
 20          }
 21 
 22           public   string  ContactPhone
 23          {
 24               get ;
 25               set ;
 26          }
 27 
 28           public   override   string  ToString()
 29          {
 30               return  Name;
 31          }
 32 
 33           string  System.IFormattable.ToString( string  format, IFormatProvider formatProvider)
 34          {
 35               if  (formatProvider  !=   null )
 36              {
 37                  ICustomFormatter fmt  =  formatProvider.GetFormat( this .GetType())  as  ICustomFormatter;
 38                   if  (fmt  !=   null )
 39                  {
 40                       return  fmt.Format(format,  this , formatProvider);
 41                  }
 42              }
 43 
 44               switch  (format)
 45              {
 46                   case   " r " :
 47                       return  Revenue.ToString();
 48                   case   " p " :
 49                       return  ContactPhone;
 50                   case   " nr " :
 51                       return   string .Format( " {0,20}, {1,10:C} " , Name, Revenue);
 52                   case   " np " :
 53                       return   string .Format( " {0,20}, {1,15} " , Name, ContactPhone);
 54                   case   " pr " :
 55                       return   string .Format( " {0,15}, {1,10:C} " , ContactPhone, Revenue);
 56                   case   " pn " :
 57                       return   string .Format( " {0,15}, {1,20} " , ContactPhone, Name);
 58                   case   " rn " :
 59                       return   string .Format( " {0,10:C}, {1,20} " , Revenue, Name);
 60                   case   " rp " :
 61                       return   string .Format( " {0,10:C}, {1,20} " , Revenue, ContactPhone);
 62                   case   " nrp " :
 63                       return   string .Format( " {0,20}, {1,10:C}, {2,15} " , Name, Revenue, ContactPhone);
 64                   case   " npr " :
 65                       return   string .Format( " {0,20}, {1,15}, {2,10:C} " , Name, ContactPhone, Revenue);
 66                   case   " pnr " :
 67                       return   string .Format( " {0,15}, {1,20}, {2,10:C} " , ContactPhone, Name, Revenue);
 68                   case   " prn " :
 69                       return   string .Format( " {0,15}, {1,10:C}, {2,15} " , ContactPhone, Revenue, Name);
 70                   case   " rpn " :
 71                       return   string .Format( " {0,10:C}, {1,15}, {2,20} " , Revenue, ContactPhone, Name);
 72                   case   " rnp " :
 73                       return   string .Format( " {0,10:C}, {1,20}, {2,15} " , Revenue, Name, ContactPhone);
 74                   case   " n " :
 75                   case   " G " :
 76                   default :
 77                       return  Name;
 78              }
 79          }
 80      }
 81 
 82       public   class  CustomFormatter : IFormatProvider, ICustomFormatter
 83      {
 84           #region  IFormatProvider Members
 85 
 86           public   object  GetFormat(Type formatType)
 87          {
 88               if  (formatType  ==   typeof (ICustomFormatter))
 89              {
 90                   return   this ;
 91              }
 92               return   null ;
 93          }
 94 
 95           #endregion
 96          
 97           #region  ICustomFormatter Members
 98 
 99           public   string  Format( string  format,  object  arg, IFormatProvider formatProvider)
100          {
101              Customer c  =  arg  as  Customer;
102               if  (c  ==   null )
103              {
104                   return  arg.ToString();
105              }
106 
107               return   string .Format( " {0,50}, {1,15}, {2,10:C} " , c.Name, c.ContactPhone, c.Revenue);
108          }
109 
110           #endregion
111      }
112 
113       class  Program
114      {
115           static   void  Main( string [] args)
116          {
117              IFormattable c1  =   new  Customer() { Name = " Ray " , ContactPhone = " 12345 " , Revenue = 200000  };
118              
119              Console.WriteLine( " Customer record: {0} " , c1.ToString( " nrp " null ));
120              Console.WriteLine( string .Format( new  CustomFormatter(),  " {0} " , c1));
121              Console.Read();
122          }
123      }
124  }

 

转载于:https://www.cnblogs.com/zhtf2014/archive/2011/01/11/1933336.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值