arrayLists中的C#对象

Mar*_*enn 5 c# arraylist object

我正在使用ArrayListC#,我想知道如何添加对象ArrayList然后从中检索值?

简而言之,如何添加,删除,编辑和读取ArrayList类的包含对象?

感谢所有的帮助!

LBu*_*kin 27

除非您处于必须使用.NET 1.0/1.1或需要与使用的旧代码交互的情况下,否则ArrayList您应该避免ArrayLists在新代码中使用.请改用通用集合类型List<>.

添加,删除和替换项目的List<T>操作非常简单.

假设您有一些假设类型Animal,您将在列表中存储的实例:

Animal dog = new Animal("dog");
Animal cat = new Animal("cat");

List<Animal> animalList = new List<Animal>();

// example of adding items to the list
animalList.Add( dog );
animalList.Add( cat );

// example of removing items form the list
animalList.Remove( cat );

// example of replacing an item at a given position
animalList[0] = new Animal("giraffe");
Run Code Online (Sandbox Code Playgroud)

对于公共接口List<T>ArrayList实际上是相当类似的.主要区别在于ArrayList只能存储object引用,因为它是在.NET支持的泛型之前实现的.

ArrayList listOfObjects = new ArrayList();
int myAge = 207;
listOfObjects.Add( (object)myAge );
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,您必须将类型int(在.NET中是值类型)转换为object.这会导致装箱转换 - 将int值类型复制到堆上的新位置,并将其传递给ArrayList.拳击转换是使用的缺点之一ArrayList- List<T>通过作为泛型类来避免这种情况.另一个问题是,ArrayList这并不妨碍您将列表中的不同类型混合在一起.例如:

listOfObjects.Add( (object)myAge );
listOfObjects.Add( "Hello World" );
Run Code Online (Sandbox Code Playgroud)

都是允许的.但是,在访问a的元素时ArrayList,您必须知道要尝试检索的类型.这使得ArrayList作为集合类型更加脆弱,因为调用者必须编写代码以保护自己免受存储在其中的任意类型的影响ArrayList,或者使用反射和运行时类型检查来转换存储的值.List<T>通过允许避免了这两个问题的编译器来帮助验证只有适当的类型存储在集合中(这些匹配类型参数TList<T>).

还有很多关于与集合交互的文章 - 实际上有.这里只是关于这个主题的许多好书之一链接.我的建议是,在开始用.NET/C#编写代码之前,你应该花时间熟悉C#语言的基本概念并输入类型系统 - 什么是参考与价值类型.什么是原始.什么是泛型.这将有助于确保在您开始编写代码时,代码可以满足您的需要.C#有一个复杂而丰富的类型系统 - 以及庞大的框架类库.在深入编写实际代码之前,有必要在语言的核心方面有一个良好的基础.像我上面展示的那些例子只会让你到目前为止 - 他们已经引入了许多语言概念:变量,构造函数,泛型,拳击转换等.