如何在自定义索引处的列表中插入对象

Nau*_*nja 6 .net c# list object

我有一个空列表定义为包含120个值,我想在索引(45)处插入一个元素,即使该列表当前为空.这可能吗?

public List<Ticket> Tickets = new List<Ticket>(120);

Tickets.Insert(45,ticket); // Here I am getting the ArgumentOutOfRangeException
Run Code Online (Sandbox Code Playgroud)

Jak*_*rtz 12

您将列表的初始内部容量设置为120.列表仍为空.

List<T>可以容纳任意数量的物品.在内部,它使用数组来存储它们.如果数组已满,列表将分配一个新的,更大的数组.如果您事先知道项目数,则可以在构造列表时设置内部数组的大小.这样就可以避免不必要的内存分配.

你可以使用一个数组:

Ticket[] tickets = new Ticket[120];
tickets[45] = ticket
Run Code Online (Sandbox Code Playgroud)

或者a Dictionary<int, Ticket>

Dictionary<int, Ticket> tickets = new Dictionary<int, Ticket>();
tickets.Add(45, ticket);
Run Code Online (Sandbox Code Playgroud)

或创建List<Ticket>持有120个空值:

List<Ticket> tickets = Enumerable.Repeat(default(Ticket), 120).ToList();
Run Code Online (Sandbox Code Playgroud)


fub*_*ubo 8

120被定义为列表的容量 - 而不是真正存在的元素.所以在这种情况下,您的列表在插入时包含0个元素.

当您尝试将位置45处的元素插入空列表时 - ArgumentOutOfRangeException有意义


Ham*_*jam 5

你也可以使用字典

var dic = new Dictionary<int,Ticket>();
dic[45] = ticket;
Run Code Online (Sandbox Code Playgroud)