IFormatProvider接口
2013-11-14 19:34
211 查看
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类型,我们也可以这样设置不同的格式。
首先介绍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类型,我们也可以这样设置不同的格式。
相关文章推荐
- h264 rtp打包
- php字符串简介
- PHP编程遇到的小问题
- PHP扩展官方搜索地址
- Pure-FTPd
- FTP 服务
- cacti插件学习手札--php-Weathermap
- EditPlus正则表达式
- php 解析 视频 信息 封面 标题 图片 支持 优酷, 土豆 酷6 56 新浪 qq播客 乐视 乐视
- 用FileZilla Server开FTP
- 在PHP语言中使用JSON
- vsto插件在64位Office的一个异常---算术运算溢出(IntPtr转int)
- php (六) PHP常量
- PHP 添加扩展
- php中查找数组中是否存在某个元素
- php (五) PHP运算符
- PHP多进程编程
- php导出word格式数据的代码分享
- MY_Log,无缝替换原生Log,支持日志输出到文件、FirePHP
- Laravel requires the Mcrypt PHP extension 解决方案