1. 程式人生 > >C#學習第六天

C#學習第六天

C#中陣列:(陣列長度為0並不代表陣列為null)

c#中的陣列初始化(賦值)方式有2種。動態初始化、靜態初始化。

動態初始化:指定長度,元素初始值由編譯器指定(0 false null)。

例如:int[] arrint = new int[10];指定陣列有10個元素,並初始化各元素的值(0)。

靜態初始化:指定初始化值,長度由編譯器根據初始化的元素個數確定。

例如 int[] arrint = new int[]{1,2,3};長度編譯器推斷出是3。

和Java不同,C#允許靜態初始化時指定陣列元素個數即長度。例如:int[] arr = new int[3]{1,2,3};注意這種方式,指定的長度必須與初始化元素個數相等。

          int[] intarr;
          //  intarr = {1,2,3};這種方式只能用於宣告並初始化的情況下
           intarr = new int[] { 1, 2, 3, 4, 5 }; //ok

   Object[] oo = { "你好", 1, 2, true };//自動裝箱
            for (int i = 0; i < oo.Length; i++)
            {
                Console.WriteLine(oo[i]);
            }

隱式陣列型別:(var)

 var ints = new[] { 1,8,9,0}; var必須用於初始化變數(以推斷其型別)。

在宣告隱式陣列時,右側初始化必須以new[]開始,{}中是各元素的值。如果原始是匿名型別,必須所有的匿名型別型別一致。例如如下:

var persons = new[]{new{name="張三",sex="男"},new{name="李四",sex="男"}};

列舉enum

由於列舉值都對應一個數字,故列舉可進行數字運算操作。

例如 enum Type{水果,電器,車,食品}

Type t = Type.水果;t++則對應於Type.電器;

   for (lib.Sex i = lib.Sex.男; i <= lib.Sex.女; i++)
            {
                Console.WriteLine(i+":"+(int)i);//打印出男:280;女:281.注:列舉值男=280.

            }


 微笑集合:

 //集合 ArrayList使用
            ArrayList al = new ArrayList(3);
            foreach (int i in new int[] { 10, 20, 1, 9, -10, 8, 2, 5, 7, 0, 3, -5 })
            {
                al.Add(i);//自動裝箱i為object
            }
            //打印出10, 20, 1, 9, -10, 8, 2, 5, 7, 0, 3, -5,
            foreach (object o in al)
            {
                Console.Write("{0},",o);
            }
            Console.WriteLine("");

            al.Insert(0, 128);
            al.Insert(al.Count, 188);
            al.Insert(1, 2);
            //打印出128,2,10, 20, 1, 9, -10, 8, 2, 5, 7, 0, 3, -5,188,
            foreach (object o in al)
            {
                Console.Write("{0},", o);
            }
            Console.WriteLine("");

            al.Remove(128);//移除值等於128的第一個元素
            al.Remove(2);
            //打印出10, 20, 1, 9, -10, 8, 2, 5, 7, 0, 3, -5,188,
            foreach (object o in al)
            {
                Console.Write("{0},", o);
            }
  //佇列使用
            Queue q = new Queue();
            for (int i = 0; i < 10; i++)
            {
                q.Enqueue(i);//自動裝箱為object
                Console.WriteLine(i+"入隊");
            }
            //遍歷佇列
            foreach (Object i in q)
            {
                Console.WriteLine(i);
            }
            Console.Write("\n");

            //出佇列
            //int k = q.Count;
            for (; q.Count>0; )
            {
                Console.WriteLine("{0} 出佇列!", q.Dequeue());
            }
           
            /*while (q.Count > 0)  OK
            {
                int num = (int)q.Dequeue();//拆箱
                Console.WriteLine("{0} 移除佇列!",num);
            }
            */

 //棧的使用

            Stack s = new Stack();
            foreach (int i in new int[] { 1, 2, 3, 4, 5 })
            {
                s.Push(i);//自動裝箱為Object
                Console.WriteLine("{0}被壓進棧",i);
            }

            //遍歷棧 打印出5,4,3,2,1
            foreach (Object o in s)
            {
                Console.WriteLine("遍歷到{0}",o);
            }

            //出棧(從棧頂刪除元素),每刪除一個元素,Count會自動變化
            while (s.Count > 0)
            {
                int num = (int)s.Pop();//拆箱
                Console.WriteLine("{0} 出棧(從棧刪除)",num);
            }

 集合初始化器:委屈

 只有實現了集合介面Add方法的集合類才能使用集合初始化器。格式 collectionType cl = new CollectionType(){obj1, obj2,……}。編譯器會自動呼叫該類的Add方法把這些初始化器中的元素新增到集合中去。

例如 ArrayList al = new ArrayList(){1,2,3,4,5};編譯器自動呼叫ArrayList例項的Add方法,把這些元素新增到集合中。佇列Queue和棧Stack沒有Add,故她們不能使用初始化器。

雜湊表Hashtable和SortList可以如下使用初始化器:

Hashtable ht = new Hashtable(){  {"a",100},{"b",200}  };裡面元素為匿名物件,key示例中的字串“a”等,Value為100等。

            //雜湊表和排序列表(裡面元素為DictionaryEntry),鍵和值都是Object
            Hashtable ht = new Hashtable();
            ht["a"] = 100;
            ht["b"] = "字串";
            foreach (DictionaryEntry o in ht)
            {

                Console.WriteLine("Key = {0};Value = {1}",o.Key,o.Value);//Key,Value都是Object,這是基本集合的特性。如ArrayList,Queue,Statck等元素都是Object。

            }

            ht["a"] = 100;
            ht["b"] = "字串001";//覆蓋原來的Key對應的值
            foreach (DictionaryEntry o in ht)
            {

                Console.WriteLine("Key = {0};Value = {1}", o.Key, o.Value);

            }

            //ht.Add("a", 500);//丟擲異常,因為通過Add新增DictionaryEntry,如果Key存在,則異常。但通過[]方式不丟擲而是覆蓋原有值。

            /*
             * SortedList 自動排序
             */
            SortedList sl = new SortedList();
            sl.Add("a", 100);
            sl.Add("c","C");
            sl.Add("b", true);

            //列印順序是a,b,c
            foreach (DictionaryEntry entry in sl)
            {
                Console.WriteLine("Key = {0};Value = {1}", entry.Key, entry.Value);
            }
            Console.WriteLine("=================================");
            //集合初始化器
            //Queue q0 = new Queue() { 1, 5, 6 };Queue,Stack不包含Add定義,所以不能使用集合初始化器
            ArrayList al0 = new ArrayList() { 10, 5, 8, 9, "中國", true };
            foreach (Object o in al0)
            {
                Console.WriteLine(o);
            }