Tip13 为类型输出格式化字符串
来源:互联网 发布:unity3d增强现实插件 编辑:程序博客网 时间:2024/06/05 13:41
Tip13 为类型输出格式化字符串
有两种方法为类型提供格式化的字符串输出:
1、让类型继承接口IFormattable。(需要预见类型在格式化方面的需求)
2、让类型继承接口IFormatProvider和ICustomFormatter,为类型自定义格式化器。
方法1的例子:
class Person : IFormattable { public string IDCode { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string ToString(string format, IFormatProvider formatProvider) { switch (format) { case "Ch": return this.ToString(); case "Eg": return string.Format("{0} {1}", FirstName, LastName); default: return this.ToString(); } } public override string ToString() { return string.Format("{0} {1}", LastName, FirstName); } }
Person person = new Person() { FirstName = "Jessica", LastName = "Hu", IDCode = "NB123" };Console.WriteLine(person);Console.WriteLine(person.ToString("Ch", null));Console.WriteLine(person.ToString("Eg", null));//输出如下:Hu JessicaHu JessicaJessica Hu
方法2的例子:
class Person { public string IDCode { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } class PersonFormatter : IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) { if (formatType == typeof(ICustomFormatter)) { return this; } else { return null; } } 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); case "ChM": return string.Format("{0} {1}", person.LastName, person.FirstName, person.IDCode); default: return string.Format("{0} {1}", person.FirstName, person.LastName); } }
Person person = new Person() { FirstName = "Jessica", LastName = "Hu", IDCode = "NB123" }; Console.WriteLine(person.ToString()); PersonFormatter pFormatter = new PersonFormatter(); Console.WriteLine(pFormatter.Format("Ch", person,null)); Console.WriteLine(pFormatter.Format("Eg", person, null)); Console.WriteLine(pFormatter.Format("ChM",person,null)); //输出: ConsoleApplication1.Person Hu Jessica Jessica Hu Hu Jessica
其实可以在方法1的ToString方法稍作修改,让格式化输出在语法上支持更多的调用方式:
class Person : IFormattable { public string IDCode { get; set; } public string FirstName { get; set; } public string LastName { get; set; } //实现接口IFormattable的方法ToString public string ToString(string format, IFormatProvider formatProvider) { switch (format) { case "Ch": return this.ToString(); case "Eg": return string.Format("{0} {1}", FirstName, LastName); default: //return this.ToString(); ICustomFormatter customFormatter = formatProvider as ICustomFormatter; if (customFormatter == null) { return this.ToString(); } return customFormatter.Format(format, this, null); } } //重写Object.ToString() public override string ToString() { return string.Format("{0} {1}", LastName, FirstName); } }
调用如下:
Person person = new Person() { FirstName = "Jessica", LastName = "Hu", IDCode = "NB123" }; Console.WriteLine(person.ToString()); PersonFomatter pFormatter = new PersonFomatter(); //第一类格式化输出语法 Console.WriteLine(pFormatter.Format("Ch", person, null)); Console.WriteLine(pFormatter.Format("Eg", person, null)); Console.WriteLine(pFormatter.Format("ChM", person, null)); //第二类格式化输出语法,也更简洁 Console.WriteLine(person.ToString("Ch", pFormatter)); Console.WriteLine(person.ToString("Eg", pFormatter)); Console.WriteLine(person.ToString("ChM", pFormatter));
阅读全文
0 0
- Tip13 为类型输出格式化字符串
- 建议13: 为类型输出格式化字符串(1)
- 建议13: 为类型输出格式化字符串(2)
- fmt标签格式化输出字符串为日期格式字符串
- 格式化输出LONGLONG类型
- printf格式化输出类型
- qDebug格式化输出类型
- 格式化输出LONGLONG类型
- 格式化输出字符串
- printf格式化输出字符串
- 字符串格式化输出
- Android字符串格式化输出
- php 字符串 格式化输出
- python 字符串格式化 输出
- 格式化format()输出字符串
- VC格式化输出字符串
- lua 格式化输出字符串
- JavaScript字符串格式化输出
- 作为菜鸟对反射的理解
- 一个Linux命令Java实现
- pandas入门——数据过滤
- Springmvc学习小结
- hdu 6061 RXD and functions [快速数论变换]
- Tip13 为类型输出格式化字符串
- GDB调试命令
- 在Kibana上查看Apache日志
- 手动开栈
- iptables学习笔记:端口转发命令优化
- C++全局变量和局部变量详解
- Seacms漏洞分析利用复现 By Assassin
- android接入华为推送
- Kanade's sum(链表优化)