最近我听说ArrayList
从System.Collections
是不是安全,是什么问题? 安全是:可能有错误,或可能有不良行为。为什么C#中的ArrayList不安全?
-4
A
回答
8
他们是不是安全的,因为它们不是强类型。这意味着你在编译时不知道可以存储在里面的对象的类型。您还需要将其转换为实际类型,这意味着只有在运行时才会出现错误。您应该使用泛型和强类型等效List<T>
。
看看下面的例子,你需要投从ArrayList中实际类型得到的结果:
ArrayList list = new ArrayList();
list.Add(123);
int element = (int)list[0];
事情会变得极其错误的,如果你施放了错误的类型和程序将只在运行时崩溃。
而用List<T>
你不需要这个施法,你会得到编译时的安全性:
List<int> list = new List<int>();
list.Add(123);
int element = list[0];
现在,如果通过安全你的意思是线程安全(相对于类型安全),那么这是一个完全不同的东西。 ArrayList
和List<T>
都不是线程安全的类。这意味着如果您尝试从另一个线程修改它的一个线程读取集合,则可能会遇到异常或损坏的数据。在.NET 4.0中,已经引入了thread safe collections。
9
它不是强类型也不是本质上就是线程安全的*。有更好的选择支持强类型,例如System.Collections.Generic.List<T>
。
ArrayList
不支持编译时类型检查,可以引入装箱/拆箱开销,并且一般来说比较麻烦。它是在泛型之前引入的,它消除了上述问题。
*精度的利益,ArrayList中也暴露出Synchronized
属性,它提供了线程安全(see notes at end of article)的水平。
2
这是不安全的,因为以下在运行时出现故障:
myArrayList.Add(new Banana());
Airplane obj = (Airplane)myArrayList[0];
编译器无法检测到您正在尝试使用一个香蕉,飞机,因为ArrayList的需要,只返回object
S,和一切在.NET中是一个object
。
ArrayList
基本上已经被替换为System.Collections.Generics.List(T)
因为.NET 2.0;它是一个更强类型的替代品,不允许出现这种错误。
相关问题
- 1. 什么是C/C++中的“安全”和“不安全”代码?
- 2. __caller__为什么不安全?
- 3. 这为什么不安全?
- 4. 为什么在JavaScript中eval不安全?
- 5. 为什么我的安全iframe被报告为不安全?
- 6. 为什么“strcat”被视为“不安全”?
- 7. 为什么我的cookie不安全?
- 8. 为什么“f = f ++”在c中不安全?
- 9. 为什么肥皂是安全的?为什么不使用HTTPS?
- 10. SimpleDateFormat - 不安全,但为什么?
- 11. 为什么MAVLink协议不安全?
- 12. 为什么Django函数django.views.static.serve()不安全?
- 13. 为什么内联JS块不安全?
- 14. vsnprintf为什么安全?
- 15. 为什么CopyOnWriteArrayList安全?
- 16. 为什么“example.it”安全并且“www.example.it”不安全?
- 17. 为什么这被认为是Sharepoint中的“不安全更新”?
- 18. C++中不安全的含义是什么?
- 19. 为什么复制{ctrl down} c {ctrl up}比^ c更安全?
- 20. 为什么不是运算符类型在java中安全的?
- 21. 为什么认为加密更安全?
- 22. 为什么ConcurrentHashMap.putifAbsent是安全的?
- 23. 为什么是安全的弦
- 24. 为什么我的不安全代码块比我的安全代码慢?
- 25. ArrayList的线程安全
- 26. 为什么在中断中不能安全使用mutex_trylock?
- 27. 为什么strtok()被认为是不安全的?
- 28. 为什么我在这里没有安全或不安全的操作?
- 29. 什么是不安全的HTML?
- 30. C#为什么sizeof是不安全的,以及如何以安全的方式获取结构的大小?
您是不是要找“类型安全”? – 2013-02-18 22:15:56
你的安全是什么意思?类型安全吗?线程安全? – 2013-02-18 22:15:58
[ArrayList有什么错误?](http:// stackoverflow。com/questions/3326599/whats-wrong-with-an-arraylist) – Asik 2013-02-18 22:21:52