如何在列表中交换2个元素

use*_*943 2 c# xna swap list

可能重复:
在List <T>中交换两个项目

编辑:也许这可以用于获取'b'值?

for (int i = 0; i < inventory.Count; i++)
{
    if (inventory[a].ItemRectangle.Intersects(inventory[i].ItemRectangle))
    {
        itemB = inventory[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是我的进步.

Item itemA;
Item itemB;

int a = -1;
int b = -1;

if (a != -1 && b != -1)
{
    itemA = inventory[a];
    itemB = inventory[b];

    Swap(ref itemA, ref itemB);

    inventory[a] = itemA;
    inventory[b] = itemB;
}
Run Code Online (Sandbox Code Playgroud)

而这里是我获得'a'价值的地方.

if (item.ItemSelected == true)
{
    a = item.ItemIndex;
}
else
    a = -1;
Run Code Online (Sandbox Code Playgroud)

我还没弄明白如何获得'b'值,因为我必须检查一个项目是否与同一列表中的另一个项目发生冲突.如果有人知道我怎么做,请告诉我.我想这看起来像这样:

if (item.ItemRectangle.Intersects(//the other item.ItemRectangle)
{
    b = item.ItemIndex;
}
else
    b = -1;
Run Code Online (Sandbox Code Playgroud)

我做了一个名为库存的List <Item>.所以现在我想实现一个swap函数,如下所示:

foreach (Item item in inventory)
{
    if (mouseRectangle.Intersects(item.ItemRectangle))
    {
        if (Input.EdgeDetectLeftMouseDown())
        {
            switch (item.ItemSelected)
            {
                case false:
                    item.ItemSelected = true;
                    break;
                case true:
                    item.ItemSelected = false;
                    break;
            }
        }  
    }
    else if (Input.EdgeDetectLeftMouseDown())
    {
        switch (item.ItemSelected)
        {
            case true:
                item.ItemSelected = false;
                break;
        }
    }
    else if (item.ItemSelected == true)
    {
        item.ItemPosition = new Vector2(mouseRectangle.X, mouseRectangle.Y);
        item.ItemRectangle = new Rectangle(mouseRectangle.X, mouseRectangle.Y, 32, 32);
    }
    else if (item.ItemSelected == false && //a lot of checks to determine it is not intersecting with an equip slot
    {
        item.ItemPosition = item.OriginItemPosition;
        item.ItemRectangle = item.OriginItemRectangle;
    }
    else if (item.ItemRectangle.Intersects(item.ItemRectangle))
    {
        //SwapItem(inventory, item, item);
    }
Run Code Online (Sandbox Code Playgroud)

这就是我需要帮助的代码的一部分.我希望列表中的任何项目都能够与列表中的任何其他项目交换.我的SwapItem方法只是一个占位符,我实际上还没有一个SwapItem方法.

我希望您传递给方法的参数与我想要交换的项相关.因此,第一个项目是我用鼠标选择的项目,另一个项目应该是第一个项目与之交叉的项目.

Hab*_*bib 14

要交换列表的元素,您可以编写扩展方法.

public static class ExtensionMethods
{
    public static void Swap<T>(this List<T> list, int index1, int index2)
    {
         T temp = list[index1];
         list[index1] = list[index2];
         list[index2] = temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

请记住将扩展方法放在静态类中.

然后你可以这样做:

yourList.Swap(0,1); // swap element at index 0 with element at index 1
Run Code Online (Sandbox Code Playgroud)

  • 使用扩展方法+1! (2认同)