【发布时间】:2011-03-23 00:06:20
【问题描述】:
我正在使用 C# 中的 ArrayList,我想知道如何将对象添加到 ArrayList,然后从中检索值?
简而言之,如何在包含类对象的ArrayList 中添加、删除、编辑和读取?
感谢大家的帮助!
【问题讨论】:
-
你需要做的就是将它正确地投射到消费者代码上
我正在使用 C# 中的 ArrayList,我想知道如何将对象添加到 ArrayList,然后从中检索值?
简而言之,如何在包含类对象的ArrayList 中添加、删除、编辑和读取?
感谢大家的帮助!
【问题讨论】:
除非您处于必须使用 .NET 1.0/1.1,或者需要与使用 ArrayList 的旧代码交互的情况 - 您确实应该避免在新代码中使用 ArrayLists .请改用generic 集合类型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");
List<T> 和 ArrayList 的公共接口实际上非常相似。主要区别在于 ArrayList 只能存储 object 引用,因为它是在 .NET 支持泛型之前实现的。
ArrayList listOfObjects = new ArrayList();
int myAge = 207;
listOfObjects.Add( (object)myAge );
在上面的示例中,您必须将 int (which are value types in .NET) 等类型转换为对象。这会导致装箱转换 - 将 int 值类型复制到堆上的新位置,并将其传递给 ArrayList。 Boxing conversions 是使用 ArrayList 的缺点之一 - List<T> 通过成为 generic class 来避免这种情况。另一个问题是ArrayList 不会阻止您将列表中的不同类型混合在一起。例如:
listOfObjects.Add( (object)myAge );
listOfObjects.Add( "Hello World" );
都是允许的。但是,当访问 ArrayList 的元素时,您必须知道您要尝试检索的类型。这使得ArrayList 作为一个集合类型更加脆弱,因为调用者必须编写代码来保护自己免受ArrayList 中存储的任意类型的影响,或者使用反射和运行时类型检查来转换存储的值。 List<T> 通过允许编译器 帮助验证集合中仅存储了适当的类型(与List<T> 中的类型参数T 匹配的类型),从而避免了这两个问题。
关于与集合交互的内容还有很多 - 事实上确实有。这是许多关于该主题的好书的link to just one。 我的建议是,在您开始使用 .NET/C# 编写代码之前,您应该花时间去familiarize yourself with the basic concepts of the C# language and type system - 什么是引用类型与值类型。什么是原语。什么是泛型。等等。这将有助于确保当您开始编写代码时,代码会执行您需要执行的操作。 C# 有一个复杂而丰富的类型系统,以及一个庞大的框架类库。在深入编写实际代码之前,在语言的核心方面打下良好的基础非常重要。像我上面展示的例子只能让你到目前为止 - 它们已经介绍了许多语言概念:变量、构造函数、泛型、装箱转换等。
【讨论】:
首先,在 C# 中最好使用 List,而不是 ArrayList。例如,如果你想要一个字符串列表:
List<String> myList = new List<String>();
或
var myList = new List<String>();
那么方法会类似,例如
myList.Add("bla");
var test = myList[0];
【讨论】:
您可以像处理列表或集合一样执行此操作(请尝试使用 .add 方法)。
【讨论】:
我使用类似的方法,但我无法使用它..给出一些错误,如对象是字段不能用作类型..:/我想知道即使使用 ArrayList 对象我也能在 java 中使用它..我低估了它 bcz 我的对象是字段,但为什么我不能使用它:(
列表列表 = new List();
person p2 = new person("Hammad", "Lahore", 1, 123);
person p3 = new person("adnan", "Lahore", 1, 123);
person p4 = new person("qamar", "Lahore", 1, 123);
lists.Add(p2);
【讨论】: