溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

C#怎么自定義集合初始化器

發(fā)布時(shí)間:2022-08-01 09:24:01 來(lái)源:億速云 閱讀:154 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“C#怎么自定義集合初始化器”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“C#怎么自定義集合初始化器”文章吧。

對(duì)int類(lèi)型集合初始化,這樣寫(xiě):

        static void Main(string[] args)
        {
            var list = new List<int> {0, 1};
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

對(duì)鍵值對(duì)集合初始化,這樣寫(xiě):

        static void Main(string[] args)
        {
            var dic = new Dictionary<string, string>
            {
                {"location", "qingdao"},
                {"street","lingchuang"}
            };

            foreach (var item in dic)
            {
                Console.WriteLine("{0}:{1}", item.Key, item.Value);
            }
            Console.ReadKey();
        }

編譯器是如何"讀懂"集合初始化器?

編譯器根據(jù)慣例來(lái)理解集合初始化器,即約定:如果一個(gè)類(lèi)型實(shí)現(xiàn)IEnumerable<T>接口,并且提供了Add(object obj)方法,該類(lèi)型可以使用集合初始化器。

假設(shè),我們想通過(guò)一個(gè)集合初始化器來(lái)定義一個(gè)模特的集合,以胸圍、腰圍、臀圍作為集合初始化器的參數(shù):

var list = new MoTes{
    {79, 60, 89},
    {82, 63, 90}
};

{79, 60, 89}就像int類(lèi)型一樣,是一個(gè)數(shù)據(jù)結(jié)構(gòu),把它定義成結(jié)構(gòu)類(lèi)型:

    public struct SanWei
    {
        public readonly double _Xiong;
        public readonly double _Yao;
        public readonly double _Tun;

        //構(gòu)造函數(shù)的參數(shù)類(lèi)型、順序和數(shù)量決定了集合初始化器的參數(shù)類(lèi)型、順序和數(shù)量
        public SanWei(double xiong, double yao, double tun)
        {
            _Xiong = xiong;
            _Yao = yao;
            _Tun = tun;
        }
    }

而想讓MoTes類(lèi)可以使用集合初始化器,需要滿(mǎn)足2個(gè)條件:

  • 1、實(shí)現(xiàn)IEnumerable<SanWei>接口

  • 2、提供Add(double xiong, double yao, double tun)方法

    public class MoTes : IEnumerable<SanWei>
    {
        private readonly List<SanWei> _motes;

        public MoTes()
        {
            _motes = new List<SanWei>();
        }

        public void Add(double xiong, double yao, double tun)
        {
            _motes.Add(new SanWei(xiong, yao, tun));
        }
        public IEnumerator<SanWei> GetEnumerator()
        {
            return _motes.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }

在客戶(hù)端:

        static void Main(string[] args)
        {
            var list = new MoTes()
            {
                {79, 60, 89},
                {82, 63, 90}
            };
            foreach (var item in list)
            {
                Console.WriteLine("胸圍:{0},腰圍:{1},臀圍:{2}",item._Xiong, item._Yao, item._Tun);
            }
            Console.ReadKey();
        }

以上就是關(guān)于“C#怎么自定義集合初始化器”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI