Framework 2.0 数组Contains方法

本文介绍如何在Visual Studio 2010中将项目使用的.NET Framework版本从4.0改为2.0,并解决因版本变更导致的Array.Contains方法不可用的问题。提供了在.NET Framework 2.0中实现数组元素检查的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间装了vs2010,开发项目,默认情况下,vs2010采用的Framework是4.0版本的,后来,客户需求,要求改成2.0。

直接装2.0是装不了,必须下一个Framwork3.5 的安装包,装好好,2.0也装上了。

改成2.0后,发现数组不只从Contains这个方法,原来这个方法包含在System.Linq中,2.0中并没有这个组件,3.0以上才支持。

数组有Contains方法,在.NET Framework 2.0 版中,Array 类实现ICollection<T>接口,但必须如下书写代码:

 
1.string[] ss = new string[] { "1", "2" };
2.bool b = (ss as ICollection<string>).Contains("1");

MSDN中说明如下:
在.NET Framework 2.0 版中,Array 类实现 System.Collections.Generic.IList<T>、System.Collections.Generic.ICollection<T> 和 System.Collections.Generic.IEnumerable<T> 泛型接口。由于实现是在运行时提供给数组的,因而对于文档生成工具不可见。因此,泛型接口不会出现在 Array 类的声明语法中,也不会有关于只能通过将数组强制转换为泛型接口类型(显式接口实现)才可访问的接口成员的参考主题。将某一数组强制转换为这三种接口之一时需要注意的关键一点是,添加、插入或移除元素的成员会引发 NotSupportedException。

 

下例的第二种方法是上文里讲到的三种方法之一.

C#中怎么判断一个数组中是否存在某个数组值

(1) 第一种方法:

int[] ia = {1,2,3};
int id = Array.IndexOf(ia,1); // 这里的1就是你要查找的值
if(id==-1)
  // 不存在
else
  // 存在

(2) 第二种方法:

string[] strArr = {"a","b","c","d","e"};
bool exists = ((IList)strArr).Contains("a");
if(exists)
  // 存在
else
  // 不存在



注意: 用IList需要using System.Collections;

转载于:https://www.cnblogs.com/uwking/archive/2011/05/27/2060115.html

<think>我们正在讨论C#中的ArrayList动态数组。根据引用,ArrayList是System.Collections命名空间下的一个动态数组集合类,它可以存储不同类型的对象,并且大小可以动态增长。与普通数组不同,ArrayList不需要预先指定大小,可以动态添加和删除元素。接下来,我将详细解释ArrayList的使用方法,包括如何创建ArrayList、添加元素、访问元素、删除元素以及其他常用操作。 ###1.创建ArrayList要使用ArrayList,首先需要引入System.Collections命名空间。然后可以使用无参构造函数创建ArrayList对象,也可以使用初始容量创建。 ```csharpusingSystem.Collections; ArrayListmyArrayList =new ArrayList(); //创建一个空的ArrayListArrayListmyArrayList2 =new ArrayList(10); //指定初始容量为10```###2.添加元素使用`Add`方法在ArrayList的末尾添加单个元素,使用`AddRange`方法添加多个元素(通常是一个集合)。另外,还可以使用`Insert`方法在指定索引处插入元素。 ```csharpmyArrayList.Add("Hello");//添加字符串myArrayList.Add(123); //添加整数myArrayList.Add(true); //添加布尔值//添加一个数组int[]numbers= {1,2,3}; myArrayList.AddRange(numbers); //在索引1的位置插入一个元素myArrayList.Insert(1, "World");``` ###3.访问元素通过索引访问ArrayList中的元素,注意返回的是object类型,因此可能需要类型转换。```csharpobject firstItem= myArrayList[0];//获取第一个元素string firstString =(string)myArrayList[0];//转换为具体类型``` ###4.删除元素-`Remove`:删除第一个匹配的元素(按值)。- `RemoveAt`:删除指定索引处的元素。- `RemoveRange`:删除指定索引范围内的多个元素。 -`Clear`:清空所有元素。 ```csharpmyArrayList.Remove("Hello"); //删除值为"Hello"的元素myArrayList.RemoveAt(0); //删除索引0处的元素myArrayList.RemoveRange(0,2); //从索引0开始删除2个元素myArrayList.Clear();//清空ArrayList``` ###5.其他常用属性和方法- `Count`:获取ArrayList中实际包含的元素个数。 -`Capacity`:获取或设置ArrayList的容量(内部数组的大小)。- `Sort`:对ArrayList中的元素进行排序(要求元素可比较)。- `IndexOf`:返回元素第一次出现的索引。- `Contains`:检查是否包含某个元素。```csharpint count= myArrayList.Count; //元素个数int capacity= myArrayList.Capacity;//当前容量myArrayList.Sort();//排序(如果元素类型不可比会出错) intindex =myArrayList.IndexOf(123);//查找123的索引boolexists =myArrayList.Contains("Hello");//检查是否包含"Hello"``` ###6.遍历ArrayList可以使用`foreach`循环遍历ArrayList中的元素。```csharpforeach (object itemin myArrayList){Console.WriteLine(item);} ```###注意事项- ArrayList可以存储任何类型的对象,但使用时需要类型转换,这可能导致运行时错误(如果类型不匹配)。-由于ArrayList不是类型安全的,C#2.0引入了泛型集合`List<T>`,它提供了类型安全并且性能更好。因此,在开发新项目时,建议优先使用`List<T>`。###示例代码下面是一个完整的示例,展示ArrayList的基本操作: ```csharpusingSystem;using System.Collections;class Program{staticvoid Main(){ArrayList list= newArrayList();list.Add(1);list.Add("Two");list.Add(3.0);Console.WriteLine("初始元素:");foreach(varitem inlist){Console.WriteLine(item);}list.Insert(1, "Inserted");Console.WriteLine("\n在索引1处插入'Inserted'后:");for (int i=0;i <list.Count; i++){Console.WriteLine(list[i]);}list.Remove("Two");Console.WriteLine("\n删除'Two'后:");foreach(varitem inlist){Console.WriteLine(item);}} }``` ###输出结果```初始元素: 1Two3.0在索引1处插入'Inserted'后:1InsertedTwo3.0删除'Two'后: 1Inserted3.0``` ###总结ArrayList是一个动态数组,可以动态调整大小,存储不同类型的对象。但它的非泛型特性带来了类型安全和性能问题,因此在现代C#编程中,更推荐使用泛型集合`List<T>`。然而,了解ArrayList对于维护旧代码或理解集合的发展仍然很重要。 §§相关问题§§1. ArrayList和List<T>有什么区别?2.如何避免ArrayList中的类型转换错误? 3. ArrayList的容量(Capacity)和元素个数(Count)之间有什么关系? 4.在什么情况下应该使用ArrayList而不是List<T>?</think>### C# ArrayList 动态数组详解 #### 1. **基本概念** `ArrayList` 是 C# 中位于 `System.Collections` 命名空间下的**动态数组**,核心特性包括: - **动态扩容**:自动调整容量(初始默认容量为 4,扩容时翻倍) - **类型灵活**:可存储任意类型对象(值类型会装箱为 `object`) - **非泛型集合**:元素均为 `object` 类型,需类型转换 - **索引访问**:支持类似数组的索引器(如 `list[0]`) #### 2. **使用方法** ##### 步骤 1:引入命名空间 ```csharp using System.Collections; ``` ##### 步骤 2:创建与初始化 ```csharp // 创建空列表 ArrayList list1 = new ArrayList(); // 指定初始容量(优化性能) ArrayList list2 = new ArrayList(100); // 通过集合初始化 ArrayList list3 = new ArrayList() { "A", 10, DateTime.Now }; ``` ##### 步骤 3:核心操作 | **操作** | **方法** | **示例** | |----------------|-----------------------------|---------------------------------------| | 添加元素 | `Add()` / `AddRange()` | `list.Add("text");` | | 插入元素 | `Insert()` | `list.Insert(0, 100);` | | 删除元素 | `Remove()` / `RemoveAt()` | `list.Remove("text");` | | 访问元素 | 索引器 `[index]` | `string s = (string)list[0];` | | 查找元素 | `Contains()` / `IndexOf()` | `int pos = list.IndexOf(100);` | | 清空列表 | `Clear()` | `list.Clear();` | | 排序 | `Sort()` | `list.Sort();` | ##### 步骤 4:遍历元素 ```csharp foreach (object item in list) { if (item is string str) { Console.WriteLine($"字符串: {str}"); } else if (item is int num) { Console.WriteLine($"整数: {num}"); } } ``` #### 3. **关键特性** - **容量 vs 元素数** - `Capacity`:内部数组大小(可手动设置以减少扩容开销) - `Count`:实际元素数量 ```csharp list.Capacity = 200; // 预设容量避免频繁扩容 ``` - **类型安全风险** 需显式类型转换,错误转换会导致运行时异常: ```csharp // 错误示例 int num = (int)list[0]; // 若实际为string类型,抛出InvalidCastException ``` - **性能注意事项** - **值类型装箱**:存储值类型(如 `int`)会产生装箱开销 - **扩容成本**:频繁添加元素时,自动扩容影响性能 #### 4. **泛型替代方案(推荐)** 现代 C# 开发中,更推荐使用类型安全的泛型集合 `List<T>`: ```csharp List<string> safeList = new List<string>(); // 仅允许字符串类型 safeList.Add("No type risk"); string s = safeList[0]; // 无需强制转换 ``` #### 5. **适用场景** - 遗留代码维护 - 需要存储混合类型(但建议使用 `List<object>` 替代) - .NET Framework 1.x 兼容需求 > **注意**:新项目应优先选择 `List<T>`,除非有特殊兼容性要求[^1][^2][^3]。 --- ### 示例代码 ```csharp using System; using System.Collections; class Program { static void Main() { ArrayList dynamicList = new ArrayList(); // 添加混合类型 dynamicList.Add("Apple"); dynamicList.Add(42); dynamicList.Add(true); // 修改元素 dynamicList[1] = 100; // 遍历输出 foreach (var item in dynamicList) { Console.WriteLine(item.GetType() + ": " + item); } // 输出:Count = 3, Capacity = 4 Console.WriteLine($"\n元素数: {dynamicList.Count}, 容量: {dynamicList.Capacity}"); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值