zoukankan      html  css  js  c++  java
  • IFormatProvider接口

    IFormatProvider接口

    首先介绍String.Format(IFormatProvider, string format, Object[] args)方法,其中args参数指定待format的参数列表。format参数指定格式,format参数的语法格式如下:

    {index[,alignment][:formatString]}

    Index是从0开始的int数,对应args列表中的参数,例如:

    string str1 = string.Format("{0} is a student", "li");

    string str2= string.Format("{0} and {1} are students", new object[] { "li", "liu" });

    str1li is a student,str2li and liu are students

    alignment指示这个被format的结果的最小宽度,是一个int型数,当formatted value的长度

    小于最小宽度时,该值为正数,则在结果的左边补齐空格,负数则右边补齐空格,例如:

    string str3 = string.Format("{0,-8}", "my");

    str3"my "

    formatString是一个用于自定义format格式的参数,看下面的例子:

    public class AcctNumberFormat : IFormatProvider, ICustomFormatter

    {

    private const int ACCT_LENGTH = 12;

    public object GetFormat(Type formatType)

    {

    if (formatType == typeof(ICustomFormatter))

    return this;

    else

    return null;

    }

    public string Format(string fmt, object arg, IFormatProvider formatProvider)

    {

    // Convert argument to a string

    string result = arg.ToString();

    // If account number is less than 12 characters, pad with leading zeroes

    if (result.Length < ACCT_LENGTH)

    result = result.PadLeft(ACCT_LENGTH, '0');

    // If account number is more than 12 characters, truncate to 12 characters

    if (result.Length > ACCT_LENGTH)

    result = result.Substring(0, ACCT_LENGTH);

    // Add hyphens for formatting code "H"

    if (!String.IsNullOrEmpty(fmt) && fmt.ToUpper() == "H")

    return result.Substring(0, 5) + "-" + result.Substring(5, 3) + "-" + result.Substring(8);

    // Return string representation of argument for any other formatting code

    else

    return result;

    }

    调用的地方如下:

    long acctNumber;

    acctNumber = 104254567890;

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber));

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber));

    acctNumber = 14567890;

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber));

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber));

    acctNumber = 18779887654111;

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0:H}", acctNumber));

    Console.WriteLine(String.Format(new AcctNumberFormat(), "{0}", acctNumber));

    当格式为"{0:H}"的时候,传递给public string Format(string fmt, object arg, IFormatProvider formatProvider)方法的fmt参数的值就为"H",当为"{0}"的时候,fmt值就为null。本例的输出结果如下:

    10425-456-7890

    104254567890

    00001-456-7890

    000014567890

    18779-887-6541

    187798876541

    IFormatProvider已经被DateTimeFormatInfoNumberFormatInfoCultureInfo实现了,而且CultureInfo提供了DateTimeFormatNumberFormat分别对该Culture所对应的这两个属性的操作。

    NumberFormatInfo类:

    在该类中提供了许多Format patten,以及和该pattern对应的属性,例如:

    Format pattencC,指定为货币格式,对应的属性有CurrencyNegativePatternCurrencySymbol等。如下设置负数的时候为一种特殊的格式:

    _nfi = new NumberFormatInfo();

    //_nfi.CurrencySymbol=Application.CurrentCulture.NumberFormat.CurrencySymbol;

    _nfi.CurrencyNegativePattern = 10; //eg.1.1显示为 1.1 $-

    我们应用它的时候要同时指定FormatFormatInfo属性,例如:

    this.ultraGrid1.DisplayLayout.Bands[0].Columns["Price"].Format = "C"; // currency type

    this.ultraGrid1.DisplayLayout.Bands[0].Columns["Price"].FormatInfo = _nfi;

    同样,对于DataTime类型,我们也可以这样设置不同的格式。

  • 相关阅读:
    医学影像
    阿里云九卿 大数据产业化
    陈海青 阿里
    店铺高频问题主动生成知识点机器 大脑+人脑 知识库
    数据总线和流计算在城市大脑中的应用
    无推荐不APP
    ww
    业务架构
    jd算法大赛 一个user_id只需映射到一个sku_id, 但是一个sku_id能否映射到多个user_id
    短URL DH 密钥交换算法
  • 原文地址:https://www.cnblogs.com/bear831204/p/1325608.html
Copyright © 2011-2022 走看看