《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));
posted @ 2017-04-26 10:27  爱幻想の宅  阅读(278)  评论(0编辑  收藏  举报