首页 > 解决方案 > 具有多个条件的 switch 语句 [已解决]

问题描述

我有这样的代码:

switch (array[0], array[1], array[2])
{
    case (EntityRoute.North, EntityRoute.West, EntityRoute.South):
        prohibitedRoute = EntityRoute.East;
        return true;
    
    case (EntityRoute.South, EntityRoute.West, EntityRoute.North):
        prohibitedRoute = EntityRoute.East;
        return true;
    
    case (EntityRoute.North, EntityRoute.East, EntityRoute.South):
        prohibitedRoute = EntityRoute.West;
        return true;
    
    case (EntityRoute.South, EntityRoute.East, EntityRoute.North):
        prohibitedRoute = EntityRoute.West;
        return true;
    
    case (EntityRoute.South, EntityRoute.East, EntityRoute.North):
        prohibitedRoute = EntityRoute.West;
        return true;
}

我想制作一个条件顺序不严格的系统。有没有办法在不写额外案例的情况下做到这一点?请考虑到我使用的是 C# 8.0,因为我在 Unity3D 中工作。

标签: c#unity3dc#-8.0

解决方案


没有必要switch声明。试试这个:

EntityRoute[] all = new [] { EntityRoute.North, EntityRoute.East, EntityRoute.South, EntityRoute.West,  };
EntityRoute[] array = new [] { EntityRoute.East, EntityRoute.South, EntityRoute.North, };
EntityRoute prohibitedRoute = all.Except(array).First();
Console.WriteLine(prohibitedRoute.ToString());

这给了我:

West

你甚至可以all这样定义:

EntityRoute[] all = Enum.GetValues(typeof(EntityRoute)).Cast<EntityRoute>().ToArray();

推荐阅读