日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

[C#]使用IFormattable接口来实现字符串格式化

發(fā)布時(shí)間:2023/12/29 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 [C#]使用IFormattable接口来实现字符串格式化 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文為原創(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。