最近我聽說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. 這爲什麼不安全?
- 3. 爲什麼Generics.Collections.TObjectList.List不安全?
- 4. __caller__爲什麼不安全?
- 5. 爲什麼在JavaScript中eval不安全?
- 6. 爲什麼地圖在C++中不是多線程安全的?
- 7. 爲什麼我的安全iframe被報告爲不安全?
- 8. 爲什麼「strcat」被視爲「不安全」?
- 9. 爲什麼我的cookie不安全?
- 10. 爲什麼「f = f ++」在c中不安全?
- 11. 爲什麼肥皂是安全的?爲什麼不使用HTTPS?
- 12. 爲什麼內聯JS塊不安全?
- 13. 爲什麼MAVLink協議不安全?
- 14. 爲什麼會話ID cookie不安全
- 15. 爲什麼Django函數django.views.static.serve()不安全?
- 16. SimpleDateFormat - 不安全,但爲什麼?
- 17. 爲什麼CopyOnWriteArrayList安全?
- 18. vsnprintf爲什麼安全?
- 19. 爲什麼「example.it」安全並且「www.example.it」不安全?
- 20. 爲什麼這被認爲是Sharepoint中的「不安全更新」?
- 21. C++中不安全的含義是什麼?
- 22. 是什麼讓不安全的腳本「不安全」?
- 23. 爲什麼我的數組中的值不安全?
- 24. 爲什麼複製{ctrl down} c {ctrl up}比^ c更安全?
- 25. 爲什麼認爲加密更安全?
- 26. Spring安全中的接口WebSecurityExpressionHandler爲什麼不推薦使用?
- 27. 爲什麼允許密碼中的重複字符不安全?
- 28. 爲什麼不是運算符類型在java中安全的?
- 29. 爲什麼ConcurrentHashMap.putifAbsent是安全的?
- 30. 爲什麼同步安全的整數?
您是不是要找「類型安全」? – 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