zoukankan      html  css  js  c++  java
  • C# ToString常用技巧总结

    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();
    }
    复制代码

    输出结果:

     
     
    分类: C#
  • 相关阅读:
    微信公众平台申请消息接口验证工具
    Android应用开发学习之启动另外一个Activity
    九宫格数值分组
    Squid--hash代码分析
    ThreadPoolExecutor原理和使用
    [数字dp] hdu 3271 SNIBB
    C#同步SQL Server数据库Schema
    [AC自己主动机] zoj Searching the String
    人活着系列Tanya和蔡健雅猪 (floyd)
    安装在谷歌axure小工具
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3196799.html
Copyright © 2011-2022 走看看