是否有可能做这样的事情:
ArrayList arl = new ArrayList();
arl.Add(1);
arl.Add("test");
int[,] tab = new int[4, 4];
init(tab);
arl.Add(tab);
是否可以包含各种类型的对象(如 JavaScript 或 Lua)?(C#)
是的,有可能。ArrayList 存储类型的集合,这object
意味着您可以插入任何.NET
类型。
你真的应该使用List<T>
. 例如:
List<int> listIntegers = new List<int>();
listIntegers.Add(1);
您也可以使用List<object>
,但是您必须将列表中的所有项目拆箱。这可能会导致性能问题。
是的,ArrayList 包含 object 类型的元素,因此这意味着您可以将所有内容放入其中。再次检索它时,您可以将其恢复为原始类型。当然,由于这种铸造,它的效率较低。
是的,因为它不进行任何类型检查,所以它有时会比List<T>
使用引用类型时更快,尽管当你有一个完美的类型安全替代方案时,通常不建议使用它。
任何继承自的类型object
都可以存储在ArrayList
. 每当您访问 an 中的项目时,ArrayList
您必须小心将其转换为正确的类型,否则您将收到编译器错误。
我相信ArrayList
这是.Net中泛型类型之前的旧遗物
至于您的问题,是的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,但这只是我个人的偏好
您可以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>();