C#中使用IFormattable实现自定义格式化字符串输出示例

IFormattable接口提供了ToString()方法的定义,使用该方法可以将对象的值按照指定的格式转化成字符串的功能。

下面是ToString()方法的完整定义。

代码如下:

string ToString( string format, IFormatProvider formatProvider )

其中:

第一个参数告诉方法需要何种格式的输出,而第二个IFormatProvider的参数则允许类型的使用者自定义格式化方法,在本文实现的ToString()方法中,并没有使用到第二个参数。关于IFormatProvider接口请阅读文章《ICustomFormatter及IFormatProvider接口用法揭秘》,本文不做过多说明。下面是完整的实例代码。

using System;
using System.Globalization;

namespace GreetingExample
{
  public class Greeting : IFormattable
  {
    private string name;
    public Greeting(string name)
    {
      this.name = name;
    }

    public override string ToString()
    {
      return this.ToString("CN",CultureInfo.CurrentCulture);
    }

    public string ToString(string format)
    {
      return this.ToString(format,CultureInfo.CurrentCulture);
    }

    public string ToString(string format, IFormatProvider provider)
    {
      if (String.IsNullOrEmpty(format)) format = "CN";
      if (provider == null) provider = CultureInfo.CurrentCulture;
      switch (format.ToUpper())
      {
        case "CN":
        case "TW":
          return "你好," + name.ToString();
        case "US":
        case "GB":
          return "Hello," + name.ToString();
        case "JP":
          return "こんにちは," + name.ToString();
        default:
          throw new FormatException(String.Format("The {0} format string is not supported.", format));
      }
    }
  }
}
using System;

namespace GreetingExample
{
  class Program
  {
    static void Main(string[] args)
    {
      Greeting greeting = new Greeting("三五月儿");
      Console.WriteLine(greeting.ToString("CN"));
      Console.WriteLine(greeting.ToString("US"));
      Console.WriteLine(greeting.ToString("JP"));
    }
  }
}

下面是代码的运行结果。

(0)

相关推荐

  • C#.net格式化时间字符串达到不同的显示效果

    有时候我们要对时间进行转换,达到不同的显示效果 默认格式为:2005-6-6 14:33:34 如果要换成成200506,06-2005,2005-6-6或更多的该怎么办呢 我们要用到:DateTime.ToString的方法(String, IFormatProvider) using System; using System.Globalization; String format="D"; DateTime date=DataTime,Now; Response.Write(da

  • javascript模拟C#格式化字符串

    JS 模拟C# 字符串格式化操作 /*** ** 功能: 字符串格式化替换操作 ***/ String.prototype.format = function () { var args = arguments; return this.replace(/\{(\d+)\}/g, function (m, i) { return args[i]; }); } js实现类似c#中的字符串处理函数format(): 熟悉c#的应该知道有format()这么一个方法,下面就来模仿一下,在javascr

  • C# 格式化字符串的实现代码

    1 前言 如果你熟悉Microsoft Foundation Classes(MFC)的CString,Windows Template Library(WTL)的CString或者Standard Template Library(STL)的字符串类,那么你对String.Format方法肯定很熟悉.在C#中也经常使用这个方法来格式化字符串,比如下面这样: int x = 16; decimal y = 3.57m; string h = String.Format( "item {0} se

  • C#中使用IFormattable实现自定义格式化字符串输出示例

    IFormattable接口提供了ToString()方法的定义,使用该方法可以将对象的值按照指定的格式转化成字符串的功能. 下面是ToString()方法的完整定义. 复制代码 代码如下: string ToString( string format, IFormatProvider formatProvider ) 其中: 第一个参数告诉方法需要何种格式的输出,而第二个IFormatProvider的参数则允许类型的使用者自定义格式化方法,在本文实现的ToString()方法中,并没有使用到

  • logback自定义json日志输出示例详解

    目录 前言 依赖的jar maven坐标 配置Appender节点 appender配置说明: 配置logger节点 logger配置说明: 前言 先说下楼主的使用场景吧,将程序的某些方法调用以json格式的内容记录到文件中,提供给大数据做数据分析用.当然这个需求实现起来很简单,通过aop拦截切面统一输出内容到文件即可.下面要介绍的就是通过logback日志体系以及logstash提供的json log依赖将数据以json格式记录到日志文件的例子. 依赖的jar logstash-logback

  • Python中格式化字符串的四种实现

    关于Python的格式化字符串,几乎所有接触过Python语言的人都知道其中一种,即使用运算符%,但对于绝大多数初学者来说也仅此而已. 因此,本文将先总结如何通过%运算符来格式化字符串,同时指出这种方式的缺点,然后带你了解Python中另外三种强大的格式化字符串的方式:str.format().f-string以及模板字符串,并给出在何时选择何种方式的建议. 一.%运算符格式化字符串 1. 如何使用 字符串对象都有一个使用%运算符完成的內置操作,可被用来格式化字符串.最简单的如: In [11]

  • C语言利用sprintf固定字符串输出位数

    目录 一.前言 二.案例 [1]多个整数输出补齐 [2]单个整数输出补齐 [3]固定时间长度 [4]浮点数补齐 [5]onenet数据组合 一.前言 sprintf 函数是一个 C 语言中的函数,也被许多其他编程语言所支持.它允许你根据一组变量来格式化和存储一个字符字符串.sprintf 函数可以用于将格式化的数据写入字符数组或字符串中,然后根据需要打印或存储该字符串.sprintf 函数的第一个参数是格式化数据将被写入的字符数组或字符串,随后的参数是用于生成格式化输出的变量.sprintf 函

  • 在ASP.NET 2.0中操作数据之十一:基于数据的自定义格式化

    介绍 我们可以通过控制HeaderStyle, RowStyle, AlternatingRowStyle和其他一些属性来改变GridView, DetailsView, 和 FormView的样式,比如cssClass, Font, BorderWidth, BorderStyle, Bar, Width, Height等 一般,自定义格式化与我们所要显示的数据的值有关系.例如, 为了吸引用户注意那些库存为空的产品,我们可以将库存对应的字段UnitsInStock  和UnitsOnOrder

  • Python中应该使用%还是format来格式化字符串

    %还是format 1.皇城PK Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是format这根本就不算个问题.不信你往下看. # 定义一个坐标值 c = (250, 250) # 使用%来格式化 s1 = "敌人坐标:%s" % c 上面的代码很明显会抛出一个如下的TypeError: TypeError: not all arguments converted dur

  • 详解AngularJS中$filter过滤器使用(自定义过滤器)

    1.内置过滤器 * $filter 过滤器,是angularJs中用来处理数据以更好的方式展示给我用户.比如格式化日期,转换大小写等等. * 过滤器即有内置过滤器也支持自定义过滤器.内置过滤器很多,可以百度.关键是如何使用: * 1.在HTML中直接使用内置过滤器 * 2.在js代码中使用内置过滤器 * 3.自定义过滤器 * * (1)常用内置过滤器 * number 数字过滤器,可以设置保留数字小数点后几位等 * date 时间格式化过滤器,可自己设置时间格式 * filter 过滤的数据一般

  • php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例

    本文实例讲述了php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8用法.分享给大家供大家参考,具体如下: /* *gb2312中文字符串截取 */ function substr_for_gb2312($str,$start,$len=null) { $totlelength = strlen($str); //特例情况 if ($len == null) $len = $totlelength; if ($len ==0) return ""

  • vue中的过滤器及其时间格式化问题

    一.过滤器介绍 Vue.js 允许你自定义过滤器,可被用于一些常见的文本格式化.过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从 2.1.0+ 开始支持).过滤器应该被添加在 JavaScript 表达式的尾部,由 管道 符号指示: <!-- 在双花括号中 --> {{ message | capitalize }} <!-- 在 `v-bind` 中 --> <div v-bind:id="rawId | formatId">

随机推荐