C#泛型与ArrayList:扩展数组功能与常见陷阱

需积分: 11 0 下载量 103 浏览量 更新于2024-08-16 收藏 858KB PPT 举报
在C#编程中,数组是一种基础数据结构,但ArrayList和List<T>(泛型)提供了更为灵活和功能丰富的操作。首先,让我们深入了解数组和这些集合类的区别: 1. **数组的固定容量**: Array在C#中是静态类型的,一旦创建,其长度是固定的。这限制了它的灵活性,如当元素数量增加时,需要手动扩大数组并移动元素,可能导致效率较低。相比之下,ArrayList和List<T>的容量可以根据需要动态增长,通过改变Capacity属性自动完成内存调整。 2. **增删元素的便利性**: ArrayList和List<T>支持在任何位置添加、删除或插入元素,而Array不支持这样的操作。在Array中,只能通过索引访问和修改单个元素,而这两个类允许批量操作,提高了代码的可读性和维护性。 3. **类型转换与兼容性**: C#中的类型转换分为隐式和显式转换。隐式转换要求数据类型兼容,且目标类型不能小于源类型。例如,将一个整数转换为字符,需要显式转换,可以使用Convert或特定类型的构造函数,如`int.Parse()`。 4. **易错问题示例**: - 问题1:在switch语句中,`im/3`导致整数除法结果可能不是整数,导致输出意外。正确做法应确保case分支处理的是整数值范围。 - 问题2:混合类型相加时,需要明确操作符含义。`inta=20; string b="10"; Console.WriteLine(a + b);`这里会拼接字符串,而不是数值相加。 - 问题3:for循环中,`i`与`s.Length`的变量重名,导致在循环范围内声明同名变量引发错误。避免此类问题时,应在循环外部声明变量。 5. **遍历和操作集合**: - 使用foreach遍历字符串和数组时,需要区分字符数组和字符串对象,两者处理方式不同。字符数组直接遍历字符,而字符串遍历的是字符序列。 - switch语句在C#中,`break`关键字在`case`块结束时默认存在,省略会导致编译错误,这是C#与Java语法上的区别。 C#中的ArrayList和List<T>作为动态数组,提供了许多Array不具备的特性,如动态扩容、便捷的元素操作和类型安全。了解并熟练运用这些高级特性能够提高代码的可读性和性能。同时,注意处理类型转换和避免变量命名冲突这类常见的编程陷阱,能有效减少错误。