C#數(shù)組初始化概括
學(xué)習(xí)C#數(shù)組時(shí),經(jīng)常會(huì)遇到C#數(shù)組初始化問題,這里將介紹C#數(shù)組初始化問題的解決方法。
C#數(shù)組初始化
1、int[] iArray = new int[3]{2, 3, 4} 花括號(hào)被稱為數(shù)組初始化器,數(shù)組初始化器只能在聲明數(shù)組變量時(shí)使用,不能在聲明數(shù)組之后使用C#數(shù)組初始化,還可以不指定數(shù)組的大小 int[] iArray = new int[]{2, 3, 4} 編譯器會(huì)自動(dòng)計(jì)算,使用C#編譯器還有一種更簡化的形式 int[] iArray = {2, 3, 4};
2、分清數(shù)組維數(shù)和每一維長度(上下界)的區(qū)別;
3、用括號(hào)聲明數(shù)組是C#中使用Array類的記號(hào),在后臺(tái)使用C#語法,會(huì)創(chuàng)建一個(gè)派生于基礎(chǔ)Array的新類。這樣,就可以使用Array類為每個(gè)C#數(shù)組定義的方法和屬性了。例如Length屬性,還可以使用foreach語句迭代數(shù)組,其實(shí)這是使用了Array類中的GetEnumerator()方法,或者說在Array類中實(shí)現(xiàn)了枚舉器。
4、Array類是一個(gè)抽象類,不能使用構(gòu)造函數(shù)來創(chuàng)建數(shù)組,但除了可以使用C#語法創(chuàng)建數(shù)組實(shí)例外,還可以使用它的CreateInstance()靜態(tài)方法創(chuàng)建數(shù)組,如果事先不知道元素類型,或者想創(chuàng)建索引不基于0的數(shù)組,就可以使用改靜態(tài)方法。
5、數(shù)組是引用類型,所以將一個(gè)數(shù)組賦予另一個(gè)數(shù)組變量,就會(huì)得到兩個(gè)指向同一個(gè)數(shù)組的變量。而復(fù)制數(shù)組實(shí)現(xiàn)ICloneable接口。這個(gè)接口定義的Clone()方法會(huì)創(chuàng)建(無需創(chuàng)建新數(shù)組則使用CopyTo方法或Array.Copy())一個(gè)數(shù)組的淺副本,也就是說,如果數(shù)組元素是值類型,就會(huì)復(fù)制所有的值,如果數(shù)組包含的是引用類型,則不復(fù)制元素本身,而只是復(fù)制引用。如果需要包含引用類型的數(shù)組的深副本,就必須迭代數(shù)組,創(chuàng)建新對(duì)象。
6、Array類實(shí)現(xiàn)了對(duì)數(shù)組中元素的冒泡排序。Sort()方法需要數(shù)組中的元素實(shí)現(xiàn)IComparable接口。簡單類型,如String和Int32實(shí)現(xiàn)了IComparable接口(升序)。調(diào)用語法為Array.Sort(...)
7、類對(duì)象如果需要在數(shù)組或集合中能夠被排序,就必須實(shí)現(xiàn)ICompable接口,這個(gè)接口定義了一個(gè)方法CompareTo();但如果排序的方式比較復(fù)雜,如需要對(duì)哪個(gè)字段進(jìn)行排序,是升序還是降序,或者不能修改類的定義,則可以針對(duì)該類定義一個(gè)IComparer接口,在調(diào)用數(shù)組或集合的Sort()方法時(shí)執(zhí)行它,IComparer接口定義了Compare()方法。
8、Array類實(shí)現(xiàn)了IEumerable、ICollection和IList接口,ICollection接口派生于IEnumerable,IList派生于ICollection。以上介紹C#數(shù)組初始化。
【編輯推薦】