我在C#中使用ArrayList
,我想知道如何将对象添加到ArrayList
,然后从中检索值?
简而言之,如何添加,删除,编辑和读取包含类的ArrayList
对象?
感谢所有人的帮助!
答案 0 :(得分:27)
除非您处于必须使用.NET 1.0 / 1.1,或需要与使用ArrayList
的旧代码进行交互的情况 - 否则您应该避免使用{{1}在新代码中。请改用generic集合类型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");
和List<T>
的公共接口实际上非常相似。主要区别在于,ArrayList只能存储ArrayList
个引用,因为它是在.NET支持的泛型之前实现的。
object
在上面的示例中,您必须将类似ArrayList listOfObjects = new ArrayList();
int myAge = 207;
listOfObjects.Add( (object)myAge );
(which are value types in .NET)的类型转换为对象。这会导致装箱转换 - 将int值类型复制到堆上的新位置,并将其传递给ArrayList。 Boxing conversions是使用int
的一个缺点 - ArrayList
因为generic class而避免这种情况。另一个问题是List<T>
不会阻止您将列表中的不同类型混合在一起。例如:
ArrayList
都是允许的。但是,在访问listOfObjects.Add( (object)myAge );
listOfObjects.Add( "Hello World" );
的元素时,您必须知道您要检索的类型。这使得ArrayList
作为集合类型更加脆弱,因为调用者必须编写代码以保护自己免受ArrayList
中存储的任意类型的影响,或者使用反射和运行时类型检查来转换值存储。 ArrayList
允许编译器帮助验证集合中是否只存储了适当的类型(与List<T>
中的类型参数T
匹配的类型,从而避免了这两个问题})。
还有很多关于与馆藏互动的文章 - 实际上还有。这是关于这个主题的许多好书的link to just one。 我的建议是,在开始用.NET / C#编写代码之前,你应该花时间去familiarize yourself with the basic concepts of the C# language and type system - 什么是引用与值类型。什么是原始。什么是泛型。这将有助于确保在您开始编写代码时,代码可以满足您的需要。 C#有一个复杂而丰富的类型系统 - 以及庞大的框架类库。在深入编写实际代码之前,有必要在语言的核心方面有一个良好的基础。像我上面展示的那些例子只会让你到目前为止 - 他们已经引入了许多语言概念:变量,构造函数,泛型,拳击转换等。
答案 1 :(得分:2)
首先,最好使用List,而不是C#中的ArrayList。例如,如果您想要一个字符串列表:
List<String> myList = new List<String>();
或
var myList = new List<String>();
然后方法将类似,例如
myList.Add("bla");
var test = myList[0];
答案 2 :(得分:0)
你可以像在列表或集合上一样工作(尝试使用.add方法)。
另外,您可以read this msdn link
答案 3 :(得分:0)
列表列表=新列表();
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);