将 class 的对象添加到 arraylist 中,然后使用 arraylist 检索它的数据成员

add an object of a class into arraylist and then retrieve it's data member using arraylist

using System;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace classQuiz
{
class A {
    public int a = 100;
    public int b = 200;
}
class Program
{
    static void Main(string[] args)
    {
        A obj = new A();//object of that class
        ArrayList list = new ArrayList();
        list.Add(obj);//passing object
        Console.WriteLine(list[0]);//output down the code
        Console.ReadKey();
    }
 }
}

输出:-

         classQuiz.A

在这个程序中,我将对象传递给数组列表我想要的是如何使用数组在控制台上写入它的数据成员list.I想使用数组list.I访问它们

list[0].a;
//or
list[0].b;

可以做些什么来实现这个目标?

        +

我不想将 arraylist 更改为 List 我真的很困惑。 :D

这是因为ArrayList不知道它存储的是哪种对象。它只知道存储Objects,仅此而已。因此,编译器不确定是否存在名为 ab.

的成员

您应该改用 List<A> 知道它存储的对象的类型。只需更改此:

ArrayList list = new ArrayList();

对此:

List<A> list = new List<A>();

同时添加一个using指令:

using System.Collections.Generic;

那么,Console.WriteLine(list[0].a);Console.WriteLine(list[0].b); 就可以了。

如果只能使用ArrayList,将列表中的对象强制转换为A:

Console.WriteLine(((A)list[0]).a);
Console.WriteLine(((A)list[0]).b);

您的问题的发生是因为 ArrayList 只是 objet 实例的集合,它们对您的实际类型一无所知。所以你有两种可能:

  1. 将每个项目转换为其实际类型:

    A obj = new A();//object of that class
    ArrayList list = new ArrayList();
    list.Add(obj);//passing object
    ((A)list[0]).a = 1;            // list[0] is just object
    
  2. 或更好的方法:使用通用集合,例如强类型的 List<T>

    A obj = new A();//object of that class
    List<A>list = new List<A>();
    list.Add(obj);//passing object // list[0] is of your actual type
    obj.a = 1;