C#自定義集合初始化器
對int類型集合初始化,這樣寫:
static void Main(string[] args)
{
var list = new List<int> {0, 1};
foreach (var item in list)
{
Console.WriteLine(item);
}
Console.ReadKey();
}對鍵值對集合初始化,這樣寫:
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ù)慣例來理解集合初始化器,即約定:如果一個類型實(shí)現(xiàn)IEnumerable<T>接口,并且提供了Add(object obj)方法,該類型可以使用集合初始化器。
假設(shè),我們想通過一個集合初始化器來定義一個模特的集合,以胸圍、腰圍、臀圍作為集合初始化器的參數(shù):
var list = new MoTes{
{79, 60, 89},
{82, 63, 90}
};{79, 60, 89}就像int類型一樣,是一個數(shù)據(jù)結(jié)構(gòu),把它定義成結(jié)構(gòu)類型:
public struct SanWei
{
public readonly double _Xiong;
public readonly double _Yao;
public readonly double _Tun;
//構(gòu)造函數(shù)的參數(shù)類型、順序和數(shù)量決定了集合初始化器的參數(shù)類型、順序和數(shù)量
public SanWei(double xiong, double yao, double tun)
{
_Xiong = xiong;
_Yao = yao;
_Tun = tun;
}
}而想讓MoTes類可以使用集合初始化器,需要滿足2個條件:
- 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();
}
}在客戶端:
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#自定義集合初始化器的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
c#讀寫App.config,ConfigurationManager.AppSettings 不生效的解決方法
這篇文章主要介紹了c#讀寫App.config,ConfigurationManager.AppSettings 不生效的解決方法,需要的朋友可以參考下2015-10-10
C#正則表達(dá)式分解和轉(zhuǎn)換IP地址實(shí)例(C#正則表達(dá)式大全 c#正則表達(dá)式語法)
這是我發(fā)了不少時間整理的C#的正則表達(dá)式,新手朋友注意一定要手冊一下哦,這樣可以節(jié)省很多寫代碼的時間。下面進(jìn)行了簡單總結(jié)2013-12-12
c#斐波那契數(shù)列(Fibonacci)(遞歸,非遞歸)實(shí)現(xiàn)代碼
c#斐波那契數(shù)列(Fibonacci)(遞歸,非遞歸)實(shí)現(xiàn)代碼,需要的朋友可以參考一下2013-05-05
C#數(shù)據(jù)類型實(shí)現(xiàn)背包、隊(duì)列和棧
本文詳細(xì)講解了C#數(shù)據(jù)結(jié)構(gòu)類型,并實(shí)現(xiàn)背包、隊(duì)列和棧的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
winform c#中子窗體關(guān)閉刷新父窗體的實(shí)例
下面小編就為大家?guī)硪黄獁inform c#中子窗體關(guān)閉刷新父窗體的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02

