C# 自定义字符串格式

7c740281d90645a248cc5ec1315307af.png

格式字符串不限于内置类型,可以为自己的类型创建自定义格式字符串。为此,只需要实现接口 IFormattable。

首先是一个简单的 Person 类,它包含 FirstName 和 LastName 属性(代码文件StringFormats/Person.cs):

public class Person

{

    public string FirstName { get; set; }

    public string LastName { get; set; }

}

为了获得这个类的简单字符串表示,重写基类的 ToString 方法。这个方法返回由 FirstName 和 LastName 组成的字符串:

public override string ToString() => FirstName+""+ LastName;

除了简单的字符串表示之外,Person 类也应该支持格式字符串 F,返回名 L 和姓A,后者代表 “ all ” ;并且应该提供与 ToString 方法相同的字符串表示。为实现自定义字符串,接口 IFormattable 定义了带两个参数的 ToString 方法:一个是格式的字符串参数,另一个是 IFormatProvider 参数。IFormatProvider 参数未在示例代码中使用。可以基于区域值使用这个参数,进行不同的显示,因为 CultureInfo 类实现了该接口。

实现了这个接口的其他类是 NumberFormatInfo 和 DateTimeFormatInfo。可以把实例传递到 ToString 方法的第二个参数,使用这些类配置数字和 DateTime 的字符串表示. ToString 方法的实现代码只使用 switch 语句,基于格式字符串返回不同的字符串。为了使用格式字符串直接调用 ToString方法,而不提供格式提供程序,应重载 ToString 方法。这个方法又调用有两个参数的 ToString 方法:

public class Person : IFormattable
{
  public string FirstName { get; set; )
  public string LastName { get; set; }
  public override string ToString() => FirstName + ""+ LastName; 
  public virtual string ToString(string format) => ToString(format, null); 
  public string ToString(string format, IFormatProvider formatProvider) 
  {
    switch (format)
    {
      case null: 
      case "A":
        return ToString(); 
      case "F":
        return FirstName; 
      case "L":
        return LastName; 
      default:
        throw new FormatException($"invalid format string {format}"); 
      }
   }
}

有了这些代码,就可以显式传递格式字符串,或隐式使用字符串插值,以调用ToString 方法。隐式的调用使用带两个参数的 ToString 方法 ,并给IFormatProvider 参数传递 null :

var p1 = new Person { FirstName = "Stephanie", LastName = "Nagel" }; 

Console.WriteLine(p1.ToString("F"));

Console.WriteLine($"(p1:F}");

技术群: 需要进技术群学习交流的请添加小编微信,切记备注:加群,对以上内容有什么疑问也可以直接和小编直接沟通交流!     

小编微信:mm1552923   

公众号:dotNet编程大全      

往期推荐

e499ba08f1dc354932cc8219cf6bb2cc.png

Love life,love yourself

关注小编不迷路呦~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值