0

我正在制作一个库存系统,但我不记得我可以使用哪个。

我有一个鼠标list<item>inventory<item> 如果单击一个按钮,我想从库存中删除该项目并将其移动到鼠标,(我已经完成)但是将它放回某个地方是我遇到麻烦的地方。

如果那里还没有一个项目,那会很简单......即只使用插入但如果那里有一个项目我该怎么办?我是否将其添加到鼠标列表然后在该位置插入或插入将旧列表项移动到列表中的开头或结尾或下一个。或者,还有其他方法吗?

基本上我想单击一个按钮,删除已经存在的项目并将其放入鼠标列表中的项目,然后如果鼠标列表中已经有某些内容,则将其添加到旧项目所在的位置。

我想知道插入如何与列表一起使用。

如果我在索引 2 处插入已经在该索引处的对象/项目会发生什么情况,那么已经存在的对象/项目是向上移动并成为索引 3 还是被删除。

我想知道如果我从列表中删除某些内容,该索引是否会变为null?,即如果它像这样索引 0 =2 索引 1 =51 索引 2 =213 索引 3 =null 索引 4 =234例如或者索引 4是否变为索引 3

4

2 回答 2

0

列表是幕后的数组(如果您使用像 Reflector 这样的 IL 反汇编程序,您将能够检查这一点)。

话虽如此,当您从列表中删除一个项目时,List<T>将从源内部创建一个新数组,其中包含除已删除项目之外的所有项目。

另一方面,当您一个项目插入列表时,您会替换整个索引中的项目,并且从索引向下的所有内容都会向下移动一个位置 (感谢 BinaryWorrier)。索引中的对象不会被“销毁”:您正在从列表中删除对象引用。

于 2013-03-01T11:42:10.137 回答
0

让我们看看

static void Main(string[] args)
{
    var names = new List<string> { "Homer", "Marge", "Lisa" };

    Show(names);

    names.Insert(1, "Bart");
    Console.WriteLine("Inserted Bart at 1");

    Show(names);

    names.RemoveAt(0);
    Console.WriteLine("Removed Homer");
    Show(names);
}

private static void Show(List<string> names)
{
    Console.WriteLine("Names");
    for (int i = 0; i < names.Count; i++)
        Console.WriteLine("\t{0}: {1}", i, names[i]);
}

给我们 。. .

名称
0:荷马
1:玛吉
2:丽莎
在 1 处插入巴特
名称
0:荷马
1:巴特
2:玛吉
3:丽莎
移除荷马
名称
0:巴特
1:玛吉
2:丽莎

所以。

  1. 在第二个位置添加,会将前一个第二项向下移动到第三项(并将低于该位置的所有内容也向下推一个位置)
  2. 删除一个项目会将所有内容向上移动一个项目

科学方法有助于解决此类问题(即理论、实验、观察、必要时重复)

这回答了你的问题了吗?

于 2013-03-01T11:42:47.597 回答