指数超出范围。必须是非负数且小于集合的大小
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;
【讨论】:
以上是关于指数超出范围。必须是非负数且小于集合的大小的主要内容,如果未能解决你的问题,请参考以下文章