将 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
不知道它存储的是哪种对象。它只知道存储Object
s,仅此而已。因此,编译器不确定是否存在名为 a
或 b
.
的成员
您应该改用 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
实例的集合,它们对您的实际类型一无所知。所以你有两种可能:
将每个项目转换为其实际类型:
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
或更好的方法:使用通用集合,例如强类型的 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;
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
不知道它存储的是哪种对象。它只知道存储Object
s,仅此而已。因此,编译器不确定是否存在名为 a
或 b
.
您应该改用 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
实例的集合,它们对您的实际类型一无所知。所以你有两种可能:
将每个项目转换为其实际类型:
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
或更好的方法:使用通用集合,例如强类型的
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;