西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開發(fā)C#.NET → C# ToString格式化輸出、ToString重寫等常用技巧總結(jié)

C# ToString格式化輸出、ToString重寫等常用技巧總結(jié)

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2013/7/17 19:02:24字體大。A-A+

作者:西西點(diǎn)擊:1941次評(píng)論:0次標(biāo)簽: ToString

  • 類型:音頻處理大。1M語(yǔ)言:中文 評(píng)分:5.1
  • 標(biāo)簽:
立即下載

ToString是在開發(fā)中最常用的操作,其作用是將其它類型以字符串類型表示。例如:

int i=2;
i.ToString() //”2″
Object o = new Object();
o.ToString(); // 返回對(duì)象類型 System.Object

但是ToString也并非就這么簡(jiǎn)單。因?yàn)門oString實(shí)現(xiàn)自O(shè)bject類,而Object類是一切類的基類。其它的類繼承自O(shè)bject,自然也就實(shí)現(xiàn)了ToString方法。但是也可以重寫ToString方法。這也就衍生了其它的使用。如果我們運(yùn)用合理的話,將會(huì)使我們的開發(fā)非常的方便。例如在開發(fā)中常用到的:

一.格式化輸出,包含值類型,DateTime,GUID等,ToString()中接受參數(shù),根據(jù)參數(shù)輸出指定格式。
為實(shí)現(xiàn)格式化輸出,在相關(guān)的類型中,重寫ToString()為

public string ToString(string format) format 接收的參數(shù),按指定的格式輸出。接受參數(shù),如”C”,”D”,”E”,”等.
public string ToString(string format,IFormatProvider provider) format 接收的參數(shù),provider 為語(yǔ)言文化 如zh-CN 表示中文,en-US 表示美國(guó)英語(yǔ)

1.值類型,有時(shí)我們需要將值類型按照格式化輸出,如輸出為貨幣類型,我們只需要在ToString()中指定format為”C”,如果需要輸出美元符號(hào),可以將provider指定為en-US,例如
float f = 2000.12f;
f.ToString(“c”, CultureInfo.CreateSpecificCulture(“en-US”)); //輸出為$2,000.12

值類型中常用的參數(shù)有:

格式化參數(shù)說明
C貨幣符號(hào)
D十進(jìn)制表示,后跟數(shù)字表占位符 如25.ToString(“D3”) ; =025
等價(jià)于 25.ToString(“000”);
N易讀性數(shù)值表示法 ,用逗號(hào)分隔大型數(shù)值。如
123456.ToString(“N”);  //123,456
P百分號(hào)
X數(shù)值的16進(jìn)制表示,X后跟數(shù)字表示用幾位表示16進(jìn)制。如10.ToString(“X8”); //0000000A
F指定小數(shù)點(diǎn)位置,四舍五入
E指數(shù)表示,后跟數(shù)字表示小數(shù)點(diǎn)位數(shù)
G數(shù)值的一般表示格式,后跟數(shù)字為截取數(shù)值長(zhǎng)度

我們可以用代碼測(cè)試格式化參數(shù)的使用,如下所示:

string[] formatTypes = {"C","N","P","F2","E2","G4"};
double d = 1234.6789;
foreach(string type in formatTypes)
{
    Console.WriteLine(string.Format("{0}.ToString(\"{1}\")={2}",d,type,d.ToString(type)));
}

測(cè)試輸出

2.DateTime,格式化參數(shù)主要用于日期時(shí)間的格式化輸出。DateTime.Now的默認(rèn)格式為G。參數(shù)有一部分區(qū)分大小寫。如下所示

使用的代碼

string[] dateTimeTypes = { "d", "D", "f", "F", "g", "G", "m","M", "o", "O",
                    "R","r", "s", "t", "T", "u", "U", "y","Y" };
foreach(string type in dateTimeTypes)
{
     Console.WriteLine(string.Format("{0}:{1}", type.PadLeft(2,' '),DateTime.Now.ToString(type, CultureInfo.CreateSpecificCulture("zh-CN"))));       //設(shè)置中國(guó)的日期格式
}

測(cè)試輸出:

3.GUID,GUID為在開發(fā)過程中常用來代表唯一標(biāo)示。在GUID 類型中,格式化參數(shù)主要有:

string[] guidTypes={"N","D","B","P","X"};
foreach(string type in guidTypes)
{
    Console.WriteLine(string.Format("{0}",Guid.NewGuid().ToString(type).PadLeft(2,' ')));
}

輸出結(jié)果:

二.ToString的重寫,C#中的任何對(duì)象都繼承了ToString()方法。在自定義類中如果需要重寫ToString()方法,只需要在類中加入:
public override string ToString(){}

而支持格式化參數(shù)的ToString()需要繼承IFormattable接口,并實(shí)現(xiàn)
public string ToString(string format,IFormatProvider provider)方法

下面以People,Peoples類說明如何重寫ToString()。本例只是說明ToString()的用法,所以并沒有與數(shù)據(jù)庫(kù)交互。

class People
{
    public People(string name,string address)
    {
        this.Name = name;
        this.Address = address;
    }
    public string Name { set; get; }
    public string Address { set; get; }
}

class Peoples:IEnumerable,IFormattable
{
    private List<People> _peoples;
    private StringBuilder _sb;
    public Peoples()
    {
        _peoples = new List<People>();
    }
    public void Add(People people)
    {
        _peoples.Add(people);
    }
    public IEnumerator GetEnumerator()
    {
        foreach(People p in _peoples)
        {
            yield return p;
        }
    }
    //重寫ToString()
    public override string ToString()
    {

        return GetContent(_peoples);
    }
    //重寫帶參ToString()
    public string ToString(string format)
    {
        return ToString(format, CultureInfo.CreateSpecificCulture("zh-CN"));
    }
    //重寫帶參ToString()
    public string ToString(string format, IFormatProvider provider)
    {
        IEnumerable<People> ps = _peoples;
        if (format.ToUpperInvariant() == "B")
        {
            ps = from p in _peoples where p.Address == "北京" select p;
        }
        else if (format.ToUpperInvariant() == "S")
        {
            ps = from p in _peoples where p.Address == "上海" select p;
        }
        return GetContent(ps);
    }
    private string GetContent(IEnumerable<People> peoples)
    {
        _sb = new StringBuilder();
        foreach(People p in peoples)
        {
            _sb.AppendLine(string.Format("{0}:{1}", p.Name, p.Address));
        }
        return _sb.ToString();
    }
}
static void Main(string[] args)
{
    Peoples peoples = new Peoples(){new People("zhangsan","北京"),new People("lisi","上海"),new People("wangwu","北京"),new People("naliu","北京")};
    Console.WriteLine("本站會(huì)員有:");
    Console.WriteLine(peoples.ToString());
    Console.WriteLine("北京的會(huì)員有:");
    Console.WriteLine(peoples.ToString("B"));
    Console.WriteLine("上海的會(huì)員有:");
    Console.WriteLine(peoples.ToString("S"));
    Console.ReadLine();
}

輸出結(jié)果:

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)