[C#]使用IFormattable接口来实现字符串格式化
本文為原創(chuàng)文章、源代碼為原創(chuàng)代碼,如轉(zhuǎn)載/復(fù)制,請(qǐng)?jiān)诰W(wǎng)頁/代碼處明顯位置標(biāo)明原文名稱、作者及網(wǎng)址,謝謝!
開發(fā)工具:VS2017
語言:C#
DotNet版本:.Net FrameWork 4.0及以上
一、編寫一個(gè)Person類,代碼如下:
class Person
{
public string FirstName { set; get; }
public string LastName { set; get; }
}
并讓Person類繼承IFormattable,代碼如下:
class Person:IFormattable
{
public string FirstName { set; get; }
public string LastName { set; get; }
public string ToString(string format, IFormatProvider formatProvider)
{
//關(guān)鍵代碼,后面給出
}
}
這里將會(huì)列出需要實(shí)現(xiàn)IFormattable的方法ToString(string format, IFormatProvider formatProvider),這里是關(guān)鍵代碼,用來格式字符串,暫時(shí)不給出,由后面給出。
二、編寫PersonFormatter類,讓其繼承IFormatProvider及ICustomFormatter,用于對(duì)字符串進(jìn)行格式化,代碼如下:
class PersonFormatter : IFormatProvider,ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
//Format實(shí)現(xiàn)代碼
}
public object GetFormat(Type formatType)
{
//GetFormat實(shí)現(xiàn)代碼
}
}
Format:用于格式化字符串
Format的實(shí)現(xiàn)代碼如下:
Person person = arg as Person;
switch(format)
{
case "CH":return $"{person.LastName} {person.FirstName}";
case "EN":return $"{person.FirstName} {person.LastName}";
default: return $"{person.LastName} {person.FirstName}";
}
GetFormat的實(shí)現(xiàn)代碼如下:
if (formatType == typeof(ICustomFormatter)) return this;
return null;
因此,PersonFormatter類的代碼如下:
class PersonFormatter : IFormatProvider,ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
Person person = arg as Person;
switch(format)
{
case "CH":return $"{person.LastName} {person.FirstName}";
case "EN":return $"{person.FirstName} {person.LastName}";
default: return $"{person.LastName} {person.FirstName}";
}
}
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter)) return this;
return null;
}
}
三、實(shí)現(xiàn)Person類IFormattable接口ToString方法,代碼如下:
ICustomFormatter customFormatter = formatProvider as ICustomFormatter;
if (customFormatter == null) return this.ToString();
return customFormatter.Format(format, this, null);
最終Person類代碼如下:
class Person:IFormattable
{
public string FirstName { set; get; }
public string LastName { set; get; }
public string ToString(string format, IFormatProvider formatProvider)
{
ICustomFormatter customFormatter = formatProvider as ICustomFormatter;
if (customFormatter == null) return this.ToString();
return customFormatter.Format(format, this, null);
}
}
四、使用Peson類的ToString方法,編寫以下代碼:
Person p1 = new Person { FirstName = "XY", LastName = "CN" };
PersonFormatter pf = new PersonFormatter();
string s1 = p1.ToString("CN", pf);
Console.WriteLine(s1);
string s2 = p1.ToString("EN", pf);
Console.WriteLine(s2);
五、運(yùn)行結(jié)果:
六、附上完整源碼:
class Program
{
static void Main(string[] args)
{
Person p1 = new Person { FirstName = "XY", LastName = "CN" };
PersonFormatter pf = new PersonFormatter();
string s1 = p1.ToString("CN", pf);
Console.WriteLine(s1);
string s2 = p1.ToString("EN", pf);
Console.WriteLine(s2);
}
}
class PersonFormatter : IFormatProvider,ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
Person person = arg as Person;
switch(format)
{
case "CH":return $"{person.LastName} {person.FirstName}";
case "EN":return $"{person.FirstName} {person.LastName}";
default: return $"{person.LastName} {person.FirstName}";
}
}
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter)) return this;
return null;
}
}
class Person:IFormattable
{
public string FirstName { set; get; }
public string LastName { set; get; }
public string ToString(string format, IFormatProvider formatProvider)
{
ICustomFormatter customFormatter = formatProvider as ICustomFormatter;
if (customFormatter == null) return this.ToString();
return customFormatter.Format(format, this, null);
}
}
View Code
總結(jié)
以上是生活随笔為你收集整理的[C#]使用IFormattable接口来实现字符串格式化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中央空调怎么拆下来清洗
- 下一篇: 分析与提取QQ木马盗号技术