指数超出范围。必须是非负数且小于集合的大小

时间:2011-10-07 14:10:07

标签: c#

我正在尝试在for循环中添加一个列表。

这是我的代码 我在这里创建了一个属性

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

我想从其他列表中添加值

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;
 }

请有人纠正我的代码。

10 个答案:

答案 0 :(得分:5)

您的索引超出范围,因为当sampleItem[i]没有项目时您指的是sampleItem。您必须Add()项目......

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 
    });
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

List必须为Add;如果尚未创建索引项目,则不能将其设置为值。你需要这样的东西:

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);
}

答案 3 :(得分:0)

List<SampleItem> sampleItem = new List<SampleItem>();
foreach( var item in otherListItem)
{
 sampleItem.Add(new SampleItem { Id = item.Id, StringValue = item.Name});
}

答案 4 :(得分:0)

在你的for循环中尝试用这样的东西替换你所拥有的东西:

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

答案 5 :(得分:0)

使用

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

答案 6 :(得分:0)

执行以下操作:

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});

 }

答案 7 :(得分:0)

您收到错误,因为您从未向sampleItem列表添加任何项目。

更好的方法是使用Linq(未经测试)

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

答案 8 :(得分:0)

//使用system.linq;

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

答案 9 :(得分:0)

它发生在我身上,因为我在Mapper类中映射了两次列。 在我的情况下,我只是分配列表元素。 例如

itemList item;
ProductList product;
item.name=product.name;
item.price=product.price;