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);
            }


 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值