由于一切都从对象继承,List<T>
和List<object>
之间有什么区别?优点?缺点是什么?列表<T>和列表<object>之间的区别?
回答
如果您插入int
到List<object>
,它将被装箱。如果将它插入到List<int>
中,它将不会被装箱(对于任何值类型都是如此,用类型名称替换int
)。类似地,对于从List<object>
检索值,拆箱将发生,但不会出现List<int>
。
List<T>
是强类型的,List<object>
不是(所以你会失去编译时的安全性,并且可能会导致运行时间的爆炸)。
如果您使用List<object>
您将不会有任何项目输入,将不得不投入一切。另外,这很危险,因为你可以将任何东西放入列表中,而不知道你为什么返回任何给定的项目。
感谢您修复括号,约翰。我只是想要这样做。 –
通过“......项目输入...”,你的意思是我将无法访问属性或方法,直到我做演员。 – Xaisoft
加上编译时间支持您正在向集合添加正确类型的项目。但是,最明显的缺点是不能与对象进行交互而不投射,是的。 –
如果您有List<T>
您确定一旦对象被实例化,该列表只包含T类型的实例,您可以在里面放入任何东西。
泛型是在编译时编写具有强类型的可重用代码的好方法。
因此,如果列表可以包含不同类型,使用对象更好吗? – Xaisoft
顺便说一句好的答案。我没有考虑类型安全与列表
列表采用泛型类型作为模板参数。所以,你会真正拥有汽车的列表,如果你这样做:
List<car> list = new List<car>();
鉴于:
List<object> objlist = new List<object>();
可以容纳任何东西引用。问题是,这些引用被降级为对象,并且只有在将它们重写到正确的对象之后,才能使用它们的成员和函数。举例来说,如果你持有objlist汽车,你必须做的:
((car)objlist[0]).GetMaker();
要调用汽车行驶列表GetMaker功能wehreas你可以这样做:
list[0].GetMaker();
这里假设你有至少列表中的一辆汽车/ obj。
不错的例子。帮助我更好地理解。 – Xaisoft
的问题是有点混乱,但我认为jsmarble已经打在你将要投你的一切需要的类型主要观点之一。这是效率低下的,尤其是对于价值类型而言,List<T>
将无需对价值进行装箱和取消装箱。
也牺牲类型安全这可能会导致运行错误。
你可以考虑T作为在列表类型约束。所以,如果你说
class Vehicle {}
class Car : Vehicle {}
class Boat : Vehicle {}
class SpeedBoat : Boat {}
List<Boat> listOfBoats
列表只能包含一种类型的船和它的后代,但没有任何其他车辆。如果您已将其设置为对象,则List可基本包含任何引用类型。
注意的是,如果你想如所有来自该集合的SpeedBoats可以使用漂亮的扩展方法OfType:
//Returns IEnumerable<SpeedBoat>, casting is done for you
var speedBoats = listOfBoats.OfType<SpeedBoat>();
- 1. 列表<Integer>和List <?之间的区别super Integer>
- 2. Java泛型:列表<E>和列表<?>之间有区别吗?
- 3. 列表<T>与列表之间的区别<? extends T>
- 4. 新列表<int>(array)和array.ToList()之间有区别吗?
- 5. 就是在C#列表<>和词典<>之间的区别
- 6. IEnumerable之间的区别<T>。逆向和列表<T>。逆
- 7. 列表和序列之间的区别
- 8. Rails:<%=和<%==之间的区别?
- 9. <?php和<?之间的区别
- 10. Ruby中+和<<之间的区别
- 11. 之间的列表<MyType>和列表之间施展<IMyType>
- 12. jsp表达式标记之间的区别<%和<%=
- 13. <%form ..和<%=表格之间的区别
- 14. 两个列表之间的区别<FileInfo>
- 15. Func <>与代表和lambda表达式之间的区别
- 16. 列表<T> - 区别的T.field
- 17. <%! %>与<% %>之间的区别
- 18. 列表<string>和IEnumerable <String>有什么区别?
- 19. 复制列表<>和列表2 <>之间的某些值
- 20. 列表<Object>和列表<?>
- 21. Clojure:列表和返回列表的函数之间的区别
- 22. 列表切片和直接分配列表之间的区别?
- 23. 数组列表和列表之间的区别
- 24. <stdafx.h>和“stdafx.h”之间的区别
- 25. python:!=和<>之间的区别?
- 26. <s:Line>和graphics.lineTo()之间的区别
- 27. 类和类之间的区别<?>
- 28. #include <...>和#include“...”之间的区别?
- 29. 列表<T>和数组索引器之间有什么区别?
- 30. 在ASP.NET WebForms中,<%:, <%=和<%#之间有什么区别?
很好的答案。将继续拳击/拆箱记 – Xaisoft