第十八节 常见错误、哈希表
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
案例1: namespace e1 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } —————————————————————————————————————————————————— namespace e1 { class Program { static void Main(string[] args) { ArrayList arr = new ArrayList(); Student zhang = new Student("张靓靓", 25, Genders.Female, "唱歌", 100); Student jay = new Student("周杰杰", 29, Genders.Male, "双截棍", 110); Student lishi = new Student("李四", 35, Genders.Male, "越狱", 120); //Add方法添加元素后返回所添加元素在ArrayList中的索引 //添加的元素是什么类型的,都会隐式转换为object类型 int index = arr.Add(zhang); arr.Add(jay); arr.Add(lishi); //取值的时候他的返回值也是一个Object的类型,通常我们要对他做一个强制转换 //Student stu1 = (Student)arr[2]; //stu1.SayHi(); Console.WriteLine(index);//索引 Console.WriteLine("清空前元素个数"+arr.Count);//元素 Console.WriteLine(arr.Capacity);//容量 //arr.Clear(); //Console.WriteLine("清空后元素个数"+arr.Count); Console.WriteLine("删除前:"); foreach (object obj in arr) { Student stu = (Student)obj; stu.SayHi(); } Console.WriteLine("删除后:"); //Remove方法通过对象来删除ArrayList里的元素,且自动更新索引 //arr.Remove(jay); //arr.Remove(jay); //Remove通过索引来删除ArrayList里的元素, arr.RemoveAt(2); //foreach (object obj in arr) //{ // Student stu = (Student)obj; // stu.SayHi(); //} for (int i = 0; i < arr.Count; i++) { Student stu=(Student)arr[i]; stu.SayHi(); } Console.ReadKey(); } } } —————————————————————————————————————————————————————————————————————————————————————————————————————————— 案例2:常见错误1 namespace e2 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } ——————————————————————————————————————————————————————————— namespace e2 { class Program { static void Main(string[] args) { //常见错误1 //在删除ArrayList元素时由于它会自动的调整元素的索引 //在删除是注意所删除的索引的位置,以下删除方式索引会越界 ArrayList arr = new ArrayList(); arr.Add(new Student("张靓靓", 25, Genders.Female, "唱歌", 100)); arr.Add(new Student("周杰杰", 29, Genders.Male, "双截棍", 110)); arr.Add(new Student("李四", 35, Genders.Male, "越狱", 120)); arr.RemoveAt(0); arr.RemoveAt(1); //arr.RemoveAt(2); Console.ReadKey(); } } } ———————————————————————————————————————————————————————————————————————————————————————————————————————— 案例3 常见错误 namespace e3 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } ——————————————————————————————————————————————-—————— namespace e3 { class Program { static void Main(string[] args) { //常见错误2 //stu1和stu2他们成员的值虽然相同,但是他们所在的内存中所开辟的空间并不是同一个 //所以删除stu2对象并不会把stu1对象也一起删除! Student stu1 = new Student("张三", 18, Genders.Male, "桌球", 100); Student stu2 = new Student("张三", 18, Genders.Male, "桌球", 100); ArrayList arr = new ArrayList(); arr.Add(stu1); arr.Add(stu2); arr.Remove(stu2); Console.WriteLine("ArrayList中的元素个数:" + arr.Count); Console.ReadKey(); } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
案例1: namespace e4 { struct StudengtStruct { public string name; public int age; public StudengtStruct(string name, int age) { this.name = name; this.age = age; } } class Program { static void Main(string[] args) { StudengtStruct stu1 = new StudengtStruct("张三", 25); StudengtStruct stu2 = new StudengtStruct("李四", 32); StudengtStruct stu3 = new StudengtStruct("王五", 28); ArrayList arr = new ArrayList(); arr.Add(stu1); arr.Add(stu2); arr.Add(stu3); //结构是值类型,你在遍历ArrayList里的元素的时候,实际上将结构类型的值复制了一份给临时变量 //所以临时变量转换为结构后,对结构进行修改不会影响到ArrayList中实际元素的值! foreach (object obj in arr)//仅仅复制一份给obj { StudengtStruct s = (StudengtStruct)obj; s.age = 60; Console.WriteLine(s.age); } foreach (object obj in arr) { StudengtStruct s = (StudengtStruct)obj; Console.WriteLine("姓名:{0},年龄:{1}",s.name,s.age); } Console.ReadKey(); } } } —————————————————————————————————————————————— 案例2:哈希表 using System; using System.Collections.Generic; using System.Text; using System.Collections;//导入 namespace e5 { class Program { static void Main(string[] args) { //哈希表:是以键(Key)值和(Value)对的方式存储的集合类,他的元素是以成对的方式向 //Hashtable中添加的,我们可以通过他的键值快速找到他所对应的值! //无顺序! Hashtable ht = new Hashtable(); ht.Add("香蕉", 3); ht.Add("苹果", 5); ht.Add("菠萝", 6.5); ht.Add("柚子", 2); ht.Add("火龙果", 4.5); Console.WriteLine("ht哈希表中存放的元素个数为:{0}",ht.Count); Console.WriteLine("柚子价格:"+ht["柚子"]); Console.WriteLine("菠萝价格:"+ht["菠萝"]); Console.WriteLine("苹果价格:" + ht["苹果"]); Console.WriteLine("火龙果价格:" + ht["火龙果"]); ht.Remove("柚子"); Console.WriteLine("ht哈希表中存放的元素个数为:{0}", ht.Count); Console.WriteLine("\n遍历Hashtable中的所有的值:"); foreach (object obj in ht.Values) { Console.WriteLine(obj.ToString()); } Console.WriteLine("\n遍历Hashtable中的所有的键:"); foreach (object obj in ht.Keys) { Console.WriteLine(obj.ToString()); } Console.WriteLine("\n遍历Hashtable中的所有的键和值:"); foreach (object obj in ht.Keys) { string Key=obj.ToString(); Console.WriteLine("{0}:{1}",Key,ht[Key]); } Console.ReadKey(); } } }