Как не оценивать третью часть троичного оператора без необходимости - PullRequest
0 голосов
/ 13 декабря 2018

Для моей программы мне нужна функциональность приведенной ниже строки кода.Если условие оценивается как true, мне нужно выражение, если false, чтобы не оцениваться из-за System.IndexOutOfRangeException.Есть ли способ достичь этого?

Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[2]);

РЕДАКТИРОВАТЬ: Я не был конкретным на цели этой линии.Цель состоит в том, чтобы проверить, существует ли args[2] в коде, и, если это не так, сделать переменную другим значением, так как args[2] выдаст исключение.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Массивы основаны на 0, поэтому второй элемент имеет индекс 1, а не 2:

Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[1]);
0 голосов
/ 13 декабря 2018

Чтобы ваше условие было ложным, args.Length должно быть РАВНО 2 или выше.

Если оно равно 2, доступ к args[2] приведет к IndexOutOfRangeException, потому что толькодоступны индексы 0 и 1.

Если вы хотите, чтобы элемент SECOND в массиве args был передан в индекс 1, так как индексы массива основаны на нулях.Bobject VARvalue = (args.Length < 2) ? Zero : new Bobject(args[1]);

Или, по крайней мере, измените ваше состояние на args.Length <= 2.Я не уверен, какая из них решит вашу конкретную цель, но надеюсь, что это направит вас в правильном направлении.

...