-4

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

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

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

arl.Add(tab);

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

4

5 回答 5

1

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

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

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

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

于 2013-03-20T09:38:24.307 回答
1

是的,ArrayList 包含 object 类型的元素,因此这意味着您可以将所有内容放入其中。再次检索它时,您可以将其恢复为原始类型。当然,由于这种铸造,它的效率较低。

于 2013-03-20T09:39:15.073 回答
0

是的,因为它不进行任何类型检查,所以它有时会比List<T>使用引用类型时更快,尽管当你有一个完美的类型安全替代方案时,通常不建议使用它。

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

我相信ArrayList这是.Net中泛型类型之前的旧遗物

于 2013-03-20T09:39:00.623 回答
0

至于您的问题,是的ArrayList可以包含各种对象类型。
微软一般建议改为使用,以防止在使用相同类型时List<T>需要对 Type 进行装箱和拆箱。object

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

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

然后去:

List<arl_items> arl = new List<arl_items>();

但是,如果您的值类型没有模式,您也可以使用ArrayList,因为创建List<object>将毫无意义,因为它们是相同的。

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

于 2013-03-20T09:44:46.993 回答
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>(); 
于 2013-03-20T09:49:12.807 回答