列表引用与列表对象作为类中的成员
本文关键字:列表 成员 引用 对象 | 更新日期: 2023-09-27 17:55:51
考虑我们有一个如下所示的类
public class Hotel
{
public List<Room> lstRooms;
public List<Room> objLstRoom = new List<Room>();
}
如果我为此 Hotel 类创建一个对象,
- 该对象中的这两个变量之间有什么区别?
- 由于列表最初是空的,因此其中会存储什么?
第一个是null
。第二个不是。
如果您不为成员分配任何内容,则会为其分配默认值,因此它等于写入
public class Hotel
{
public List<Room> lstRooms = default(List<Room>);
public List<Room> objLstRoom = new List<Room>();
}
对于引用类型,默认值为 null
,因此第一个变量将变为 null
。
其他列表呢,它将被初始化,但正如你所说,它将保持为空。
lstRooms
null
但objLstRoom
是空列表。如果您访问lstRooms
您将获得空引用异常。
-
List<Room> lstRooms
会null
和 -
List<Room> objLstRoom = new List<Room>()
将是一个空列表
因此,第一个是拥有 0 间客房的酒店,第二个是没有定义房间的酒店。
在null
List
上调用实例方法会导致崩溃:
int count = lstRooms.Count; // crash because lstRooms is null
但
int count = objLstRoom.Count; // => 0
那么什么更好呢?我总是喜欢一个空列表。
因为这很糟糕:
if(hotelInstance.objLstRoom != null)
{
foreach(va room in hotelInstance.objLstRoom)
/* .... */
}
这样更好
foreach(va room in hotelInstance.objLstRoom)
/* .... */
lstRooms
将为空,objLstRoom
将为空List<Room>
,没有元素。
这意味着,例如,lstRooms.Add(new Room())
将抛出一个空引用异常,objLstRoom.Add(new Room)
将正常工作。
您的代码等效于:
public class Hotel
{
public List<Room> lstRooms;
public List<Room> objLstRoom;
public Hotel()
{
objLstRoom = null; // Default initialization in .NET
objLstRoom = new List<Room>()
}
}
What would be the difference between these two variables in that object?
lstRoom
将是null
,objLstRoom
将是empty list
。
Since list would be empty initially, what would have been stored in it?
lstRoom
或objLstRoom
都不会存储任何内容。
public class Hotel
{
public List<Room> lstRooms; // null
public List<Room> objLstRoom = new List<Room>(); // empty list
}
要回答您的问题:
该对象中的这两个变量之间有什么区别?
lstRooms 将为空,objLstRoom 将为空列表。
由于列表最初是空的,因此其中会存储什么?
它不会存储任何内容。
我一直试图把它想象成一个盒子。
所以public List<Room> lstRooms;
是一个空盒子。它有足够的空间来容纳房间对象列表,但实际上并不包含列表。(还)
public List<Room> objLstRoom = new List<Room>();
是一个盒子,里面已经有一个房间列表。构造函数被调用,这是一个相当大的区别。
在第一个示例中,您将创建对列表的引用。就像一个指针,但第二个示例实际上是在创建一个列表。
如果您尝试调用类似 lstRooms.Add(new Room());
的内容,您将收到一个未分配变量错误,因为要添加到的新房间不存在该对象。其中 as objLstRoom.Add(new Room());会正常工作。