Хорошо, я, вероятно, все это неправильно, но я не могу найти подходящее решение, поэтому любые указатели помогут. У меня есть следующее заявление в своем коде:Тернарный оператор внутри оператора if, который ничего не приводит
if (!mapDict.ContainsKey(_thisRoom.Item1))
{
MapGraphItem roomMGI = new MapGraphItem();
var rndOrderRooms = roomList.OrderBy(i => rnd.Next());
foreach (MapGraphItem room in rndOrderRooms)
{
if (!room._flags.IsFlagSet(GlobalValues.MapTileType.start) && !room._flags.IsFlagSet(GlobalValues.MapTileType.exit)
&& ((_thisRoom.Item2 == 'N') ? room._north : (_thisRoom.Item2 == 'S') ? room._south : (_thisRoom.Item2 == 'E') ? room._east : room._west)
&& ((mapOpenings.Count < 4) : !room._flags.IsFlagSet(GlobalValues.MapTileType.deadend) ? *ignore this section*))
{
roomMGI = room;
earlyRooms.Add(room);
goto Exit;
}
}
Exit:
//MapGraphItem _room = earlyRooms[rnd.Next(0, earlyRooms.Count)];
GameObject _roomGO = (GameObject)Instantiate(roomMGI.gameObject, _thisRoom.Item1, Quaternion.identity);
roomMGI._position = GlobalValues.MapTilePos.Early;
mapDict.Add(_roomGO.transform.position, roomMGI);
_mapUsed++;
if (roomMGI._north) _n = true;
if (roomMGI._south) _s = true;
if (roomMGI._east) _e = true;
if (roomMGI._west) _w = true;
Debug.Log ("Early room added at: " + _thisRoom.Item1.ToString() + " N? " + (_n ? "yes" : "no") + " S? " + (_s ? "yes" : "no") +
" E? " + (_e ? "yes" : "no") + " W? " + (_w ? "yes" : "no"));
GetRoomOpenings(_roomGO.transform.position, _n, _s, _e, _w);
_tiles--;
}
В основном, *ignore this section*
области означает, что я хочу, ничего не произойдет.
Иными словами, если первые две строки if
являются правильными, если .Count
меньше четырех, есть дополнительное условие. Если .Count
четыре или более, это условие не требуется.
Я не могу установить его на противоположное, только room._flags.IsFlagSet(GlobalValues.MapTileType.deadend)
, потому что я не хочу, чтобы его заставили быть тупиком. Я просто хочу убедиться, что это НЕ тупик, если осталось меньше четырех mapOpening
.
Получаете ли вы приз за использование самых тройных операторов в одном заявлении? Потому что я не могу думать ни о какой другой убедительной причине, почему вы не сломаете часть этого на вложенные ifs. –
Вопрос: какой результат этой программы имеет окончательный ответ - вывод заключается в том, что разработчик, который его написал, уволен. – Stilgar
Поскольку читаемость if {if {if {if ...} ...} ...} ...} не является хорошей? Я могу легко прокомментировать каждый раздел одного оператора if. И потому, что получившееся тело - это один набор вещей или ничего вообще. –