是否有可能,做这样的事情: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#)
是否有可能,做这样的事情: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#)
是,ArrayList包含的对象类型元素,因此,这意味着你可以把一切都在它之前。当再次检索它时,可以将其恢复为原始类型。 当然,由于这种铸造效率较低。
是的,它是可能的。 ArrayList存储类型为object
的集合,这意味着您可以插入任何.NET
类型。
你真的应该使用List<T>
。例如:
List<int> listIntegers = new List<int>();
listIntegers.Add(1);
你也可以使用List<object>
但是你必须拆箱列表中的所有项目。这可能会导致性能问题。
@Downvoter - 关心评论? – 2013-03-20 10:16:16
这里没有理由downvote,所以是的,为什么downvote? – 2013-03-20 10:18:01
这似乎是一个随机downvoter。我刚刚有两个问题,我问这里downvoted没有特别的原因..:/ – 2013-03-20 10:20:02
是的,可以,因为它没有做任何类型检查,它有时比一个List<T>
更快参考类型时,虽然一般不推荐,当你有一个完美的罚款类型安全的替代使用它。
从object
继承的任何类型的可被存储在一个ArrayList
。无论何时访问ArrayList
中的项目,都必须小心将其转换为正确的类型,否则将发生编译器错误。
我相信ArrayList
是从天古老遗迹泛型净
什么? ...你不正确。实际上,当对象退出时,由于运行时类型检查,它会变得更慢。 – 2013-03-20 09:47:28
取决于您在ArrayList中存储的内容,对于引用类型ArrayList实际上更快一些(通过忽略不计的数量来公平),通过将参考类型添加到阵列列表100多万次迭代并确认。另一方面,添加到“列表
我想我读过你的答案错了。我解释它的方式,你是说''ArrayList'总是比'List
至于你的问题,是ArrayList
可以包含不同的对象类型。
通常,Microsoft建议使用List<T>
代替,以防止在使用相同类型时需要装箱和取消装箱到类型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,但这只是我个人的偏好
..也许在这里澄清你的通用'列表
@SimonWhitehead谢谢,我没有意识到我太多的个人喜好混入了答案中 – Vogel612 2013-03-20 10:00:45
您可以diffent类型的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>();
这是否会导致编译错误?'ArrayList'包含对象 – 2013-03-20 09:38:08
尝试运行以查看C#编译器如何反应 – 2013-03-20 09:38:27
您是否尝试过至少一次?我看不出有任何的努力在这里.. – 2013-03-20 09:39:17