C# ToString常用技巧總結


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

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

但是ToString也並非就這么簡單。因為ToString實現自Object類,而Object類是一切類的基類。其它的類繼承自Object,自然也就實現了ToString方法。但是也可以重寫ToString方法。這也就衍生了其它的使用。如果我們運用合理的話,將會使我們的開發非常的方便。例如在開發中常用到的:

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

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

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

值類型中常用的參數有:

格式化參數 說明
C 貨幣符號
D 十進制表示,后跟數字表占位符 如25.ToString(“D3”) ; =025

 

等價於 25.ToString(“000”);

N 易讀性數值表示法 ,用逗號分隔大型數值。如

 

123456.ToString(“N”);  //123,456

P 百分號
X 數值的16進制表示,X后跟數字表示用幾位表示16進制。如10.ToString(“X8”); //0000000A
F 指定小數點位置,四舍五入
E 指數表示,后跟數字表示小數點位數
G 數值的一般表示格式,后跟數字為截取數值長度

 

我們可以用代碼測試格式化參數的使用,如下所示:

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

測試輸出

 

2.DateTime,格式化參數主要用於日期時間的格式化輸出。DateTime.Now的默認格式為G。參數有一部分區分大小寫。如下所示

使用的代碼

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"))));       //設置中國的日期格式
}

測試輸出:

 

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

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

輸出結果:

 

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

而支持格式化參數的ToString()需要繼承IFormattable接口,並實現
public string ToString(string format,IFormatProvider provider)方法

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

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("本站會員有:");
    Console.WriteLine(peoples.ToString());
    Console.WriteLine("北京的會員有:");
    Console.WriteLine(peoples.ToString("B"));
    Console.WriteLine("上海的會員有:");
    Console.WriteLine(peoples.ToString("S"));
    Console.ReadLine();
}

輸出結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM