@RomKing

Как бы разложить по полочкам выражение с тернарными операторами(пример ниже)?

Помогите, пожалуйста, понять следующую конструкцию:

int x, y;                                
string quadrant = x > 0 ? y > 0 ? "I квадрант": "IV квадрант" : y > 0 ? "II квадрант" : "III квадрант";
Console.WriteLine(quadrant);


Понимаю только до следующего момента (и то не факт, что правильно итерпретирую):
string quadrant = (если) x > 0 (и/то) ? y > 0 (то)? "I квадрант" (иначе): "IV квадрант" 
(дальше я в шоке) : y > 0 ? "II квадрант" : "III квадрант";


5ffac1a96f4fd574514270.png
  • Вопрос задан
  • 134 просмотра
Решения вопроса 2
hint000
@hint000
у админа три руки
со скобками всё проще, да?:
string quadrant = x > 0 ? ( y > 0 ? "I квадрант": "IV квадрант" ) : ( y > 0 ? "II квадрант" : "III квадрант" );
Ответ написан
robinzonejob
@robinzonejob
разработчик .NET
if (x>0)
{
	if (y>0)
	{
		//I квадрант
	} else
	{
		//IV квадрант
	}
} else
{
	if (y>0)
	{
		//II квадрант
	} else
	{
		//III квадрант
	}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vabka
@vabka Куратор тега C#
Токсичный шарпист
Форматирование решает:
int x, y;
var quadrant = x > 0 
  ? y > 0
    ? "I"
    : "IV"
  : y > 0
    ? "II"
    : "III"

Но вообще лучше использовать switch expression:
int x, y;
var quadrant = (x, y) switch {
  (>0, >0) => "I",
  (>0, <0) => "IV",
  (<0, >0) => "II",
  (<0, <0) => "III",
  _ => "Точка находится на одной из осей"
}

Чтобы использовать switch-expression, нужно обновиться до .NET 5 и C#, что я вам очень советую.
А ещё стоит объединить X и Y в структуру Point - кажется в BCL уже есть такая
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы