c# - 具有多个条件的 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 中工作。
解决方案
没有必要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();
推荐阅读
- android - 删除行后 SQLite id 行不遵循顺序
- c# - 映射到 DTO 时验证 excel 数据
- r - 重命名因子的多个级别,所有级别都包含相同的单词
- c# - 在 DateTime.ParseExact 中使用 IFormatProvider 的不变区域性
- php - 递归函数,用于查找可以从一组数字中生成数字的方式数量
- android - Android 版本名称要求
- reactjs - dispatch 什么都不做
- javascript - React Native:您试图在一个本应是不可变且已被冻结的对象上设置键
- ios - Xcode,swift:警报不解除
- testing - 自动移动到 Jmeter 中的另一个端口