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" });

则str1为li is a student,str2为li 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已经被DateTimeFormatInfo、NumberFormatInfo、CultureInfo实现了,而且CultureInfo提供了DateTimeFormat和NumberFormat分别对该Culture所对应的这两个属性的操作。

NumberFormatInfo类:

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

Format patten为c或C,指定为货币格式,对应的属性有CurrencyNegativePattern,CurrencySymbol等。如下设置负数的时候为一种特殊的格式:

_nfi = new NumberFormatInfo();

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

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

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

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

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值