【问题标题】:C# objects in arrayLists数组列表中的 C# 对象
【发布时间】:2011-03-23 00:06:20
【问题描述】:

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

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

感谢大家的帮助!

【问题讨论】:

  • 你需要做的就是将它正确地投射到消费者代码上

标签: c# object arraylist


【解决方案1】:

除非您处于必须使用 .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&lt;T&gt;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&lt;T&gt; 通过成为 generic class 来避免这种情况。另一个问题是ArrayList 不会阻止您将列表中的不同类型混合在一起。例如:

listOfObjects.Add( (object)myAge );
listOfObjects.Add( "Hello World" );

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

关于与集合交互的内容还有很多 - 事实上确实有。这是许多关于该主题的好书的link to just one我的建议是,在您开始使用 .NET/C# 编写代码之前,您应该花时间去familiarize yourself with the basic concepts of the C# language and type system - 什么是引用类型与值类型。什么是原语。什么是泛型。等等。这将有助于确保当您开始编写代码时,代码会执行您需要执行的操作。 C# 有一个复杂而丰富的类型系统,以及一个庞大的框架类库。在深入编写实际代码之前,在语言的核心方面打下良好的基础非常重要。像我上面展示的例子只能让你到目前为止 - 它们已经介绍了许多语言概念:变量、构造函数、泛型、装箱转换等。

【讨论】:

  • 我真的很喜欢学习使用对象的arrayLists。它是如何完成的。我知道它是如何使用字符串和迭代器完成的。
  • @user339067:字符串对象。
  • arraylist 不是类型安全的.. 安全并使用 IList 在哈希集合的情况下使用 Dictionary 而不是 HashTable..in .net 4 你可以利用HashSet 也是
【解决方案2】:

首先,在 C# 中最好使用 List,而不是 ArrayList。例如,如果你想要一个字符串列表:

List<String> myList = new List<String>();

var myList = new List<String>();

那么方法会类似,例如

myList.Add("bla");
var test = myList[0];

【讨论】:

    【解决方案3】:

    您可以像处理列表或集合一样执行此操作(请尝试使用 .add 方法)。

    你也可以read this msdn link

    【讨论】:

      【解决方案4】:

      我使用类似的方法,但我无法使用它..给出一些错误,如对象是字段不能用作类型..:/我想知道即使使用 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);
      

      【讨论】:

      • 提出一个新问题。不要发布愚蠢的问题作为答案。
      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2017-01-27
      相关资源
      最近更新 更多