打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C# ToString常用技巧总结

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数值的一般表示格式,后跟数字为截取数值长度

我们可以用代码测试格式化参数的使用,如下所示:

string[] formatTypes = {'C','N','P','F2','E2','G4'};double d = 1234.6789;foreach(string type in formatTypes){ Console.WriteLine(string.Format('{0}.ToString(\'{1}\')={2}',d,type,d.ToString(type)));}

测试输出

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 类型中,格式化参数主要有:

string[] guidTypes={'N','D','B','P','X'};foreach(string type in guidTypes){ Console.WriteLine(string.Format('{0}',Guid.NewGuid().ToString(type).PadLeft(2,' ')));}

输出结果:

二.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();}

输出结果:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#程序编写高质量代码改善的157个建议【13-15】[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
C#高效编程话题集2(每期10话题) - 不如来编码-luminji's web - 博客园
Reflect中MethodInfo使用方法
利用C#自带组件强壮程序日志
C#基本概念
C#中关于线程启动运行带多参数方法的操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服