将数组中的 case 项切换为 'create' 个循环 | C#

Switch case items in an array to 'create' a cycle | c#

我希望能够通过索引在数组中的 "active" 对象之间切换。为此,我需要能够 "cycle" 通过固定长度为 3 的对象数组。

当活动对象的第一项和调用函数switchObject()时,我希望能够将活动对象更改为数组中的第二项。这可能吗?

Inventory inventory = new Inventory(); /* has getObject() */
internal Object activeObject;

public void switchObject()
    {
        switch (index)
        {
            /* If active object index is 0, switch active object index to index 1 */
            case 0:
                index = 1;
                activeObject = inventory.getObject(index);

            /* If active object index is 1, switch active object index to index 2 */
            case 1:
                index = 2;
                activeObject = inventory.getObject(index);

            /* If active object index is 2, switch active object index to index 0 */
            case 2:
                index = 0;
                activeObject = inventory.getObject(index);

        }
    }

理想的行为是循环数组,例如(其中 -> 是 switch())项目 1 -> 项目 2 -> 项目 3 -> 项目 1 -> 项目 2 -> 项目 3 -> 项目 1 ....

此代码在 VS2017 中抛出错误,因为“控件无法从一个案例标签中掉落('case ;')

此外,有没有一种方法可以利用异常(可能是自定义异常?)来检查是否实际上有三个对象可用于切换?

谢谢!

有什么方法可以让它工作吗?

每个 case 末尾缺少 break; 语句。您可以添加一个 default 案例,如果索引不在 1-3 之间,您可以使用它来抛出异常。

switch (index)
    {
        /* If active object index is 0, switch active object index to index 1 */
        case 0:
            index = 1;
            activeObject = inventory.getObject(index);
            break;

        /* If active object index is 1, switch active object index to index 2 */
        case 1:
            index = 2;
            activeObject = inventory.getObject(index);
            break;

        /* If active object index is 2, switch active object index to index 0 */
        case 2:
            index = 0;
            activeObject = inventory.getObject(index);
            break;
        default:
            throw new Exception("Index can only be 1, 2 or 3");
    }

注意:default 部分不需要 break 语句,因为抛出的异常中断到 switch 流程。

希望对您有所帮助!