列表引用vs List对象作为类中的成员

时间:2013-01-25 11:42:28

标签: c# list

考虑我们正在上课,如下所示

public class Hotel
{
    public List<Room> lstRooms;
    public List<Room> objLstRoom = new List<Room>();
}

如果我为这个酒店类创建一个对象,

  • 该对象中这两个变量之间有什么区别?
  • 由于列表最初会为空,会存储哪些内容?

9 个答案:

答案 0 :(得分:3)

第一个是null。第二个不是。

答案 1 :(得分:2)

如果您没有为会员分配任何内容,则会为其分配默认值,因此它等于写

public class Hotel
{
    public List<Room> lstRooms = default(List<Room>);
    public List<Room> objLstRoom = new List<Room>();
}

对于参考类型,默认null,因此第一个变量将变为null

其他列表怎么样,它会被初始化,但是如你所说的那样仍然是空的。

答案 2 :(得分:2)

lstRoomsnull,但objLstRoom为空列表。如果您访问lstRooms,您将获得空引用异常。

答案 3 :(得分:2)

  • 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)
    /* .... */

答案 4 :(得分:1)

lstRooms将为空,objLstRoom将为空List<Room>,无元素。

这意味着,例如,lstRooms.Add(new Room())将抛出空引用异常,objLstRoom.Add(new Room)将起作用。

答案 5 :(得分:1)

您的代码相当于:

public class Hotel
{
    public List<Room> lstRooms;
    public List<Room> objLstRoom;

    public Hotel()
    {
        objLstRoom = null;  // Default initialization in .NET
        objLstRoom = new List<Room>()
    }
}

答案 6 :(得分:0)

What would be the difference between these two variables in that object?

lstRoomnullobjLstRoomempty list

Since list would be empty initially, what would have been stored in it?

lstRoomobjLstRoom都不会存储任何内容。

答案 7 :(得分:0)

public class Hotel
{
    public List<Room> lstRooms; // null
    public List<Room> objLstRoom = new List<Room>(); // empty list
}

回答你的问题:

  1. 该对象中这两个变量之间有什么区别?

    lstRooms为null,objLstRoom为空列表。

  2. 由于列表最初会为空,会存储哪些内容?

    它不会存储任何内容。

答案 8 :(得分:0)

我一直试图将其视为一个盒子。

所以public List<Room> lstRooms;是一个空盒子。它有足够的空间来容纳其中的房间对象列表,但它实际上并不包含列表。 (尚)

public List<Room> objLstRoom = new List<Room>();是一个包含房间清单的方框。调用构造函数,这是一个非常大的区别。

在第一个示例中,您将创建对列表的引用。就像一个指针,但第二个例子,你实际上是在创建一个列表。

如果您尝试调用lstRooms.Add(new Room());之类的内容,则会出现未分配的变量错误,因为要添加新房间的对象不存在。 objLstRoom.Add(new Room())的位置;会工作得很好。