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

Posted

技术标签:

【中文标题】指数超出范围。必须是非负数且小于集合的大小【英文标题】:Index was out of range. Must be non-negative and less than the size of the collection 【发布时间】:2011-12-03 01:23:46 【问题描述】:

我正在尝试在 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;
 

谁能更正我的代码。

【问题讨论】:

【参考方案1】:

您得到一个超出范围的索引,因为您在 sampleItem 没有项目时引用了 sampleItem[i]。你必须Add() items...

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

【讨论】:

哇!多谢你们。仅一分钟,我就收到了 8 个回复!这就是为什么我喜欢这个地方!我试过了,它就像一个魅力:)【参考方案2】:
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;

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
List<SampleItem> sampleItem = new List<SampleItem>();
foreach( var item in otherListItem)

 sampleItem.Add(new SampleItem  Id = item.Id, StringValue = item.Name);

【讨论】:

【参考方案5】:

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

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

【讨论】:

【参考方案6】:

执行以下操作:

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】:

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

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

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

【讨论】:

【参考方案8】:

//使用system.linq;

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

【讨论】:

【参考方案9】:

使用

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

【讨论】:

【参考方案10】:

这发生在我身上,因为我在 Mapper 类中两次映射了一个列。 就我而言,我只是分配列表元素。 例如

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

【讨论】:

以上是关于指数超出范围。必须是非负数且小于集合的大小的主要内容,如果未能解决你的问题,请参考以下文章

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

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

指数超出范围。必须是非负数且小于集合的大小。参数名称:索引

错误索引超出范围。必须是非负数且小于集合的大小

指数超出范围。必须为非负数且小于集合参数 name:index 的大小

错误:索引超出范围。必须是非负数且小于集合的大小。参数名称:索引