2011-10-07 32 views
5

Tôi đang cố gắng thêm danh sách trong vòng lặp for.Chỉ mục nằm ngoài phạm vi. Phải là số âm và nhỏ hơn kích thước của bộ sưu tập

Đây là mã của tôi Tôi tạo ra một tài sản ở đây

public class SampleItem 
{ 
    public int Id { get; set; } 
    public string StringValue { get; set; } 
} 

Tôi muốn thêm giá trị từ một danh sách khác

List<SampleItem> sampleItem = new List<SampleItem>(); // Error: Index out of range 
for (int i = 0; i < otherListItem.Count; i++) 
{ 
     sampleItem[i].Id = otherListItem[i].Id; 
     sampleItem[i].StringValue = otherListItem[i].Name; 
} 

Ai đó có thể sửa mã của tôi xin vui lòng.

Trả lời

5

Bạn nhận chỉ mục nằm ngoài phạm vi vì bạn đang tham chiếu đến sampleItem[i] khi sampleItem không có mục nào. Bạn phải Add() mục ...

List<SampleItem> sampleItem = new List<SampleItem>(); 
for (int i = 0; i < otherListItem.Count; i++) 
{ 
    sampleItem.Add(new SampleItem { 
     Id = otherListItem[i].Id, 
     StringValue = otherListItem[i].Name 
    }); 
} 
+0

Wow! Cảm ơn các bạn. Chỉ một phút và tôi nhận được 8 câu trả lời! Đây là lý do tại sao tôi yêu nơi này! Tôi đã thử nó và nó hoạt động như một nét duyên dáng :) – HardCode

0
List<SampleItem> sampleItem = new List<SampleItem>(); // Error: Index out of range 
for (int i = 0; i < otherListItem.Count; i++) 
{ 
    sampleItem.Add(new sampleItem()); // add this line 
    sampleItem[i].Id = otherListItem[i].Id; 
    sampleItem[i].StringValue = otherListItem[i].Name; 
} 
0

Một List phải Add ed để; bạn không thể chỉ đặt các mục được lập chỉ mục của nó thành các giá trị nếu chúng chưa được tạo. Bạn cần một cái gì đó như:

List<SampleItem> sampleItems = new List<SampleItem>(); 
for (int i = 0; i < otherListItem.Count; i++) 
{ 
    SampleItem si = new SampleItem 
    { 
     Id = otherListItem[i].Id, 
     StringValue = otherListItem[i].Name 
    }; 
    sampleItems.Add(si); 
} 
0
List<SampleItem> sampleItem = new List<SampleItem>(); 
foreach(var item in otherListItem) 
{ 
sampleItem.Add(new SampleItem { Id = item.Id, StringValue = item.Name}); 
} 
0

Trong bạn cho vòng thử thay thế những gì bạn có với một cái gì đó như thế này:

SampleItem item; 
item.Id = otherListItem[i].Id; 
item.StringValue = otherListItem[i].StringValue; 
sampleItem.add(item); 
0

sử dụng

List<SampleItem> sampleItem = (from x in otherListItem select new SampleItem { Id = x.Id, StringValue = x.Name }).ToList(); 
0

làm như sau:

List<SampleItem> sampleItem = new List<SampleItem>(); 
for (int i = 0; i < otherListItem.Count; i++) 
{ 
     sampleItem.Add(new SampleItem {Id= otherListItem[i].Id, StringValue=otherListItem[i].Name}); 

} 
0

bạn nhận được lỗi khi bạn không bao giờ thêm bất kỳ mục nào vào danh sách sampleItem.

một cách tốt hơn để làm điều này sẽ được sử dụng LINQ (chưa được kiểm tra)

var sampleItem = otherListItem.Select(i => new SampleItem { Id= i.Id, StringValue = i.Name}).ToList(); 
0

// sử dụng System.Linq;

otherListItem.ToList().Foreach(item=>{ 
    sampleItem.Add(new sampleItem{ 
}); 
0

Điều đó xảy ra với tôi vì tôi đã ánh xạ một cột hai lần trong lớp Mapper. Trong trường hợp của tôi, tôi chỉ đơn giản là gán các phần tử danh sách. ví dụ:

itemList item; 
ProductList product; 
item.name=product.name; 
item.price=product.price; 
Các vấn đề liên quan