ToString是在开发中最常用的操作,其作用是将其它类型以字符串类型表示。例如:
int i=2;
i.ToString() //”2″
Object o = new Object();
o.ToString(); // 返回对象类型 System.Object
但是ToString也并非就这么简单。因为ToString实现自Object类,而Object类是一切类的基类。其它的类继承自Object,自然也就实现了ToString方法。但是也可以重写ToString方法。这也就衍生了其它的使用。如果我们运用合理的话,将会使我们的开发非常的方便。例如在开发中常用到的:
一.格式化输出,包含值类型,DateTime,GUID等,ToString()中接受参数,根据参数输出指定格式。
为实现格式化输出,在相关的类型中,重写ToString()为
public string ToString(string format) format 接收的参数,按指定的格式输出。接受参数,如”C”,”D”,”E”,”等.
public string ToString(string format,IFormatProvider provider) format 接收的参数,provider 为语言文化 如zh-CN 表示中文,en-US 表示美国英语
1.值类型,有时我们需要将值类型按照格式化输出,如输出为货币类型,我们只需要在ToString()中指定format为”C”,如果需要输出美元符号,可以将provider指定为en-US,例如
float f = 2000.12f;
f.ToString(“c”, CultureInfo.CreateSpecificCulture(“en-US”)); //输出为$2,000.12
值类型中常用的参数有:
格式化参数 | 说明 |
C | 货币符号 |
D | 十进制表示,后跟数字表占位符 如25.ToString(“D3”) ; =025 等价于 25.ToString(“000”); |
N | 易读性数值表示法 ,用逗号分隔大型数值。如 123456.ToString(“N”); //123,456 |
P | 百分号 |
X | 数值的16进制表示,X后跟数字表示用几位表示16进制。如10.ToString(“X8”); //0000000A |
F | 指定小数点位置,四舍五入 |
E | 指数表示,后跟数字表示小数点位数 |
G | 数值的一般表示格式,后跟数字为截取数值长度 |
我们可以用代码测试格式化参数的使用,如下所示:
测试输出
2.DateTime,格式化参数主要用于日期时间的格式化输出。DateTime.Now的默认格式为G。参数有一部分区分大小写。如下所示
使用的代码
string[] dateTimeTypes = { 'd', 'D', 'f', 'F', 'g', 'G', 'm','M', 'o', 'O', 'R','r', 's', 't', 'T', 'u', 'U', 'y','Y' };foreach(string type in dateTimeTypes){ Console.WriteLine(string.Format('{0}:{1}', type.PadLeft(2,' '),DateTime.Now.ToString(type, CultureInfo.CreateSpecificCulture('zh-CN')))); //设置中国的日期格式}
测试输出:
3.GUID,GUID为在开发过程中常用来代表唯一标示。在GUID 类型中,格式化参数主要有:
输出结果:
二.ToString的重写,C#中的任何对象都继承了ToString()方法。在自定义类中如果需要重写ToString()方法,只需要在类中加入:
public override string ToString(){}
而支持格式化参数的ToString()需要继承IFormattable接口,并实现
public string ToString(string format,IFormatProvider provider)方法
下面以People,Peoples类说明如何重写ToString()。本例只是说明ToString()的用法,所以并没有与数据库交互。
class People{ public People(string name,string address) { this.Name = name; this.Address = address; } public string Name { set; get; } public string Address { set; get; }}class Peoples:IEnumerable,IFormattable{ private List<People> _peoples; private StringBuilder _sb; public Peoples() { _peoples = new List<People>(); } public void Add(People people) { _peoples.Add(people); } public IEnumerator GetEnumerator() { foreach(People p in _peoples) { yield return p; } } //重写ToString() public override string ToString() { return GetContent(_peoples); } //重写带参ToString() public string ToString(string format) { return ToString(format, CultureInfo.CreateSpecificCulture('zh-CN')); } //重写带参ToString() public string ToString(string format, IFormatProvider provider) { IEnumerable<People> ps = _peoples; if (format.ToUpperInvariant() == 'B') { ps = from p in _peoples where p.Address == '北京' select p; } else if (format.ToUpperInvariant() == 'S') { ps = from p in _peoples where p.Address == '上海' select p; } return GetContent(ps); } private string GetContent(IEnumerable<People> peoples) { _sb = new StringBuilder(); foreach(People p in peoples) { _sb.AppendLine(string.Format('{0}:{1}', p.Name, p.Address)); } return _sb.ToString(); }}static void Main(string[] args){ Peoples peoples = new Peoples(){new People('zhangsan','北京'),new People('lisi','上海'),new People('wangwu','北京'),new People('naliu','北京')}; Console.WriteLine('本站会员有:'); Console.WriteLine(peoples.ToString()); Console.WriteLine('北京的会员有:'); Console.WriteLine(peoples.ToString('B')); Console.WriteLine('上海的会员有:'); Console.WriteLine(peoples.ToString('S')); Console.ReadLine();}
输出结果:
联系客服