切换数组中的案例项以“创建”一个循环| C#

时间:2018-11-03 03:26:27

标签: c# switch-statement inventory

我希望能够通过其索引在数组中的“活动”对象之间进行切换。为此,我需要能够“循环”固定长度为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;')掉进去

还有,有没有一种方法可以利用异常(可能是自定义异常?)来检查是否确实存在三个可用于切换的对象?

谢谢!

有没有办法使我的工作正常?

1 个答案:

答案 0 :(得分:1)

每个break;的末尾都缺少case语句。并且您可以添加一个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流。

希望这会有所帮助!