复杂类型知识点和思考练习,及书里发现的错误
知识点
枚举enmu:是一组已命名的数值常量(元素必须是整型),为一组在逻辑上密不可分的整数值提供便于记忆的符号。
先要在类中声明枚举类型,然后才能象其他类型那样使用该类型。枚举类型的变量在一个时刻只能取枚举中的某一个元素的值。
默认情况下,枚举的基础类型为int,默认值第一个为0,可以通过 emnu 枚举类型名 : long{...}的方式将基础类型改为其他类型的整型。
改变枚举元素的值可以在申明时,对枚举元素进行赋值。在编程时,逻辑上可以将枚举变量当做整型使用,只不过这些变量的值不经过转换是不可以直接和int等类型变量发生关联和使用的。
数组:是使用类型声明的,如 int[] strArr=new int[5];
数组中的元素除了基本数据类型外,还可以是struct,enum和类类型。
思考练习
枚举
using System; namespace ComplexType { public class ComplexTypeEnum { enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; enum Range : long { MinInt32 = -2147483648, MaxInt32 = 2147483647 } static void Main() { WeekDays weekday1; weekday1 = WeekDays.Sunday; int d = (int)weekday1; //int d=(int)weekday1.Sunday;//这种写法是错的,因为变量只代表一个枚举中的元素值。 //Console.WriteLine(weekday.Tuesday);//这种写法是错的,因为变量只代表一个枚举中的元素值。 Console.WriteLine(WeekDays.Monday);//就显示“Monday” Console.WriteLine(weekday1); Console.WriteLine(d); Console.ReadLine(); for (WeekDays dayVal = WeekDays.Monday; dayVal <= WeekDays.Sunday; dayVal++)//也可以用在循环语句里! { Console.WriteLine(dayVal); Console.ReadLine(); } Range rangeMin = Range.MinInt32, rangeMax = Range.MaxInt32; long x = (long)rangeMin, y = (long)rangeMax; Console.WriteLine("The max value is {0}", y); Console.WriteLine("The min value is {0}", x); Console.ReadLine(); } } }
数组
using System; namespace ComplexType { public class ComplexTypeArray { enum WeekDays { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }; static void Main() { /* int[] i; i=new int[5];到这都是对的,这时赋值一般都用循环语句进行数组内各元素进行赋值。 i={1,2,3,4,5};不能这样写,已经new,但同时没有初始化的数组,不能直接用{}进行初始化,可以改成下面的方式,就可以了 i=new int[]{1,2,3,4,5}; */ int[] ii = new int[7];//仅写成 “int[] ii;”时,是没有赋值给数组的,写成“int[] ii=new int[7];”后,所有元素都被赋值0 Console.WriteLine(ii[6]); int[] i ={ 1, 2, 3, 4, 5 };//这是正确的 int[] j = new int[] { 1, 2, 3, 4, 5 };//一般写法 /*下一行写法也是错的,直接用{}进行赋值,只能在刚定义数组变量时才可,如:int[] i={1,2,3,4,5}; int[] i;i={1,2,3,4,5}; */ //多维数组 int[,] k = new int[2, 3]; WeekDays[] weekDayArr0 = new WeekDays[7];//此时已赋值,默认均为枚举的第一个元素的值 Console.WriteLine(weekDayArr0[5]); WeekDays[] weekDayArr = new WeekDays[] { WeekDays.Friday, WeekDays.Monday, WeekDays.Thursday, WeekDays.Monday, WeekDays.Friday, WeekDays.Sunday }; for (int p = 0; p <= 5; p++) { Console.WriteLine(weekDayArr[p]); } Console.ReadLine(); int[] testForeach = new int[] { 1, 2, 3, 4, 5, 6, 7 }; int n = 0; foreach (int foreachUnit in testForeach) { int m; if (n < 2) { n += 1; goto L2; } else goto L1; L1: m = 0;//将声明放在里面,m每次循环都被声明,每次都被初始化为0,上次循环的内容已经没有了,goto 的标签所包含的内容不能最好不要放声明的内容,即不要放如:int m;的内容,因为即使各条跳转语句经过的路线都不重复或相交,各条跳转的标签处有同样的申明语句,如同样的int m;看上去,好像不同的运行路线,但在循环体内是不允许一个循环周期内同时申明同样的变量的,哪怕这个申明的动作在实际程序运行中并不会重复! goto L3; //L1:m+=1; L2: m = 1; L3: Console.WriteLine("testForeach[{0}] is {1}", m, foreachUnit); } Console.ReadLine(); } } }
书内错误
P44页,中间一行的代码 int d=…写的是错的