2013-09-23 29 views
0

我有一个关于填充list<>元素的问题。我试图设置一个值为list<>对象的第一个元素,但它不起作用。这里是我的两个类:如何在类中填充列表<t>元素?

CLASS

 class hotel 
     { 
      public List<room> rooms = new List<room>(); 
     } 
     class room 
     { 
      public string roomName; 
     } 

Form1.cs的

private void Form1_Load(object sender, EventArgs e) 
     { 
      string word = "example"; 
      hotel[] h = new hotel[3]; 
      for (int i = 0; i < h.Length; i++) 
      { 

       h[i] = new hotel(); 
       h[i].rooms[i].roomName = word;//It gives "Index out of range exception" error. 
      } 
     } 
+7

'H [I] .rooms.Add(新间(){ROOMNAME =“something”})' – I4V

回答

6

你得到一个错误,因为当你创建了一个新的hotel,你的避风港没有添加任何room。您的代码必须做类似如下:

for (int i = 0; i < h.Length; i++) 
{ 
    h[i] = new hotel(); 
    h[i].rooms.Add(new room { roomName = word }); 
} 

如果要添加多个房间,你要么需要调用Add多次或这样做的内环内:

for (int i = 0; i < h.Length; i++) 
{ 
    h[i] = new hotel(); 
    // Add 10 rooms 
    for (int a = 0; a < 10; a++) 
    { 
     h[i].rooms.Add(new room { roomName = word }); 
    } 
} 
+0

这就是解决方案。在此之后,我会将此标记为解决方案“您可以在x分钟内接受”规则。 如果我想在“酒店”中添加多个房间,应该写什么? – AloneInTheDark

+1

@AloneInTheDark - 您必须创建一个内部循环(无论您想要添加多个房间)并调用相同的“添加”方法。 –

+0

你可以编辑一个关于这个小示例的问题吗?不管怎么说,还是要谢谢你。 – AloneInTheDark

1

使用时,您需要添加roomhotel

h[i].rooms.Add(new room {roomName = word}); 

而不是

h[i].rooms[i].roomName = word; 
2

你还没有加入一个房间到酒店:

h[i] = new hotel(); 
var room = new room(); 
room.roomName = word; 
h[i].rooms.Add(room); 
1

这可能是更容易地在你的类的快捷方法:

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

    public List<Room> Rooms { get; private set; } 
    public string Name { get; private set; } 

    public Hotel WithName(string name) 
    { 
     Name = name; 
     return this; 
    } 

    public Hotel AddRoom(string name) 
    { 
     Rooms.Add(new Room { Name = name }); 
     return this; 
    } 
} 

public class Room 
{ 
    public string Name { get; set; } 
} 

返还Hotel对象本身将允许法链接在同一个对象上,以便操作流畅地阅读。

演示:

var hotels = new List<Hotel>(); 

var hiltonHotel = new Hotel() 
         .WithName("Hilton") 
         .AddRoom("104") 
         .AddRoom("105"); 

hotels.Add(hiltonHotel); 

演示2:

var hotelNames = new List<string> { "Hilton", "Sheraton", "Atlanta" }; 

var hotels = new List<Hotel>(); 

foreach(var hotelName in hotelNames) 
{ 
    var hotel = new Hotel() 
        .WithName(hotelName); 
    hotels.Add(hotel); 
} 

演示2 LINQ:

var hotelNames = new List<string> { "Hilton", "Sheraton", "Atlanta" }; 
var hotels = hotelNames.Select(h => new Hotel().WithName(h)).ToList();