• 《C#高效编程》读书笔记05-为类型提供ToString()方法


    System.Object.ToString()是.NET环境中最常用的方法之一。编写类型时,要提供一个合理的ToString版本,否则使用者就不得不自己构造一套可以阅读的表示。

    public class Customer
    {
        public string Name { get; set; }
        public decimal Revenue { get; set; }
        public string ContactPhone { get; set; }
        public override string ToString()
        {
            return string.Format("Name:{0},Revenue:{1, 10:C},ContactPhone:{2}", Name, Revenue, ContactPhone);
        }
    }
    

    虽然简单的ToString()方法很多时候已经可以满足为用户定义的类型显示文本信息的需求,但有时还会需要功能更强的方法。
    IFormattable接口包含了一个重载的ToString()方法,它允许为类型提供特定格式的信息。

    public class Customer : IFormattable
    {
        public string Name { get; set; }
        public decimal Revenue { get; set; }
        public string ContactPhone { get; set; }
        public override string ToString()
        {
            return string.Format("Name:{0},Revenue:{1, 10:C},ContactPhone:{2}", Name, Revenue, ContactPhone);
        }
        public string ToString(string format, IFormatProvider formatProvider)
        {
            if(formatProvider != null)
            {
                ICustomFormatter fmt = formatProvider.GetFormat(this.GetType()) as ICustomFormatter;
                if (fmt != null)
                    return fmt.Format(format, this, formatProvider);
            }
            switch (format)
            {
                case "n":
                    return Name;
                case "np":
                    return string.Format("{0},{1, 15}", Name, ContactPhone);
                default:
                    return Name;
            }
        }
    }
    

    这样,Customer的使用者即可自行定义其想要的输出格式:

    var c1 = new Customer();
    c1.Name = "Jack";
    c1.ContactPhone = "13800138000";
    Console.WriteLine("Customer record:{0}", c1.ToString("np", null));
    
  • 相关阅读:
    android selector失效的原因
    Android TabActivity使用方法
    Android Build.VERSION.SDK_INT兼容介绍
    数组与指针
    字符串与字符串函数
    C控制语句:分支和跳转
    C控制语句:循环
    运算符、表达式、语句
    select
    正则验证数字
  • 原文地址:https://www.cnblogs.com/kw13202/p/6767305.html
Copyright © 2020-2023  润新知