是否有可能做这样的事情:
ArrayList arl = new ArrayList();
arl.Add(1);
arl.Add("test");
int[,] tab = new int[4, 4];
init(tab);
arl.Add(tab);
是否可以包含各种类型的对象(如在JavaScript或Lua中)? (C#)
答案 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>();