LINQ列表<>向上和向下移动元素

And*_*ner 3 c# linq asp.net-mvc asp.net-mvc-3

是否有可能告诉我List<>上下移动元素的最佳方法.

例如,我有一个名为Building and Building的类有一个Rooms对象列表List<Room>.房间按名称添加到建筑物中,但我使用此结构生成树视图.用户可以选择在建筑物内上下移动房间.

我试图使用,.Reverse(index, count)但这似乎没有做任何事情:

// can this item actually be moved up (is it at the first position in it's current parent?)
if (moveDirection == MoveDirection.UP)
{
    int roomIndex = parentBuilding.Rooms.IndexOf(room);

    if (roomIndex == 0)
    {
        return;
    }
    else
    {
        // move this room up.                            
        parentBuilding.Rooms.Reverse(roomIndex, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*ley 10

创建列表扩展.打电话给List<T>.Move(1, MoveDirection.Up).

public static class ListExtensions
{
    public static void Move<T>(this IList<T> list, int iIndexToMove, 
        MoveDirection direction)
    {

        if (direction == MoveDirection.Up)
        {
            var old = list[iIndexToMove - 1];
            list[iIndexToMove - 1] = list[iIndexToMove];
            list[iIndexToMove] = old;
        }
        else
        {
            var old = list[iIndexToMove + 1];
            list[iIndexToMove + 1] = list[iIndexToMove];
            list[iIndexToMove] = old;
        }
    }
}

public enum MoveDirection
{
    Up,
    Down
}
Run Code Online (Sandbox Code Playgroud)

要考虑的事情

  • 异常处理 - 如果您尝试向下移动底部元素或顶部元素,该怎么办?您将获得超出范围的索引,因为您无法向上或向下移动这些索引.

  • 您可以通过扩展功能将顶部元素移动到底部元素和底部元素向下移动到顶部元素等来改进这一点并防止处理异常.