考虑我们正在上课,如下所示
public class Hotel
{
public List<Room> lstRooms;
public List<Room> objLstRoom = new List<Room>();
}
如果我为这个 Hotel 类创建一个对象,
- 该对象中这两个变量之间有什么区别?
- 由于列表最初是空的,那么它会存储什么?
第一个是null
。第二个不是。
List<Room> lstRooms
would be null
andList<Room> objLstRoom = new List<Room>()
would be an empty listSo the first would be a hotel with 0 rooms and the second would be a hotel with none defined rooms.
Calling an instance method on a null
List
causes a crash:
int count = lstRooms.Count; // crash because lstRooms is null
but
int count = objLstRoom.Count; // => 0
So what is better? I would always prefer an empty list.
Because this sucks:
if(hotelInstance.objLstRoom != null)
{
foreach(va room in hotelInstance.objLstRoom)
/* .... */
}
This is better
foreach(va room in hotelInstance.objLstRoom)
/* .... */
如果您不为成员分配任何东西,它将被分配默认值,因此它等于写作
public class Hotel
{
public List<Room> lstRooms = default(List<Room>);
public List<Room> objLstRoom = new List<Room>();
}
对于引用类型,默认值为null
,因此第一个变量将变为null
.
其他列表呢,它会被初始化,但会保持为空,如你所说。
lstRooms
is null
butobjLstRoom
是空列表。如果您访问lstRooms
,您将获得空引用异常。
lstRooms
将为 null,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>()
}
}
我一直试图把它想象成一个盒子。
public List<Room> lstRooms;
一个空盒子也是如此。它有足够的空间容纳其中的房间对象列表,但它实际上并不包含列表。(然而)
public List<Room> objLstRoom = new List<Room>();
是一个已经有房间列表的盒子。构造函数被调用,这是一个很大的区别。
在第一个示例中,您正在创建对列表的引用。就像一个指针,但第二个例子你实际上是在创建一个列表。
如果你尝试调用类似的东西,lstRooms.Add(new Room());
你会得到一个未分配的变量错误,因为要添加新房间的对象不存在。其中 objLstRoom.Add(new Room()); 会工作得很好。
public class Hotel
{
public List<Room> lstRooms; // null
public List<Room> objLstRoom = new List<Room>(); // empty list
}
To answer your questions:
What would be the difference between these two variables in that object?
lstRooms would be null and objLstRoom would be an empty list.
Since list would be empty initially, what would have been stored in it?
It would have nothing stored in it.
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
存储任何内容。