C#中的ArrayList是否可以包含各种类型的对象?

时间:2013-03-20 09:36:43

标签: c# arraylist

是否有可能做这样的事情:

ArrayList arl = new ArrayList();
arl.Add(1);
arl.Add("test");

int[,] tab = new int[4, 4];
init(tab);

arl.Add(tab);

是否可以包含各种类型的对象(如在JavaScript或Lua中)? (C#)

5 个答案:

答案 0 :(得分:1)

是的,ArrayList包含object类型的元素,这意味着您可以将所有内容放入其中。再次检索时,您可以将其重新设置为原始类型。 当然,由于这种投射效率较低。

答案 1 :(得分:0)

是的,这是可能的。 ArrayList存储类型为object的集合,这意味着您可以插入任何.NET类型。

你应该真的使用List<T>。例如:

 List<int> listIntegers = new List<int>();
 listIntegers.Add(1);

您也可以使用List<object>但是您必须取消装箱列表中的所有项目。这可能会导致性能问题。

答案 2 :(得分:0)

是的它可以,因为它不进行任何类型检查,在使用引用类型时,有时List<T>更快,尽管通常不建议在使用时使用它你有一个非常好的类型安全替代品。

任何继承自object的类型都可以存储在ArrayList中。每当您访问ArrayList中的项目时,必须小心将其强制转换为正确的类型,否则您将收到编译器错误。

我认为ArrayList是.Net

中泛型类型之前的旧遗物

答案 3 :(得分:0)

至于你的问题,是ArrayList可以包含各种对象类型。
微软通常建议使用List<T>代替,以防止需要装箱和取消装箱来输入{ {1}}使用相同类型时。

如果您有重复的类型模式,那么定义自定义类可能会更有帮助(也更快):

object

然后去:

protected class arl_items
{
   public string item1 {get; set;};
   public int item2 {get; set;};
   public int[4,4] item3 {get; set;};
}

但如果你的价值类型中没有 no pattern ,你也可以使用List<arl_items> arl = new List<arl_items>(); ,因为创建ArrayList将毫无意义,因为它们是相同的。< / p>

顺便说一下。我更喜欢使用List<object>而不是ArrayList,但这只是我个人的偏好

答案 4 :(得分:0)

您可以在ArrayList中使用不同的类型 试试这个:

var ary = new ArrayList();

ary.Add("some string");
ary.Add(23.4);
ary.Add(new StringBuilder());
ary.Add("some other string");

然后您可以这样查询:

string[] strings = ary.OfType<string>();
StringBuilder[] stringBuilders = ary.OfType<StringBuilder>();