Если тогда остальное не будет работать без назначения - PullRequest
3 голосов
/ 21 февраля 2012

В C # я пытаюсь сократить часть моего кода возврата.Я хочу сделать что-то вроде

condition ? return here:return there;

или

condition ?? return here;

У меня возникли некоторые проблемы, хотя компилятор говорит, что выражение недопустимо.Вот пример:

        int i = 1;
        int a = 2;
        i < a ? i++ : a++;

Это недопустимо.Тем не менее,

        int i = 1;
        int a = 2;
        int s = i < a ? i++ : a++;

является действительным.Должно ли быть назначение для использования этой сокращенной записи?Единственный способ использовать это сейчас:

int acceptReturn = boolCondition ? return toThisPlace() : 0 ;

Мне бы очень хотелось, чтобы эта строка кода выглядела как:

boolCondition ? return toThisPlace():;

Что недопустимо, ноэто то, что я после.

Ответы [ 7 ]

14 голосов
/ 21 февраля 2012

?: не является сокращением для if / else - это конкретный оператор (условный) с определенными семантическими правилами.Эти правила означают, что его можно использовать только как выражение, а не как выражение.

Re return: если вы хотите только «вернуть, если истина», то кодируйте его так:

if(condition) return [result];

Не пытайтесь использовать условный оператор, так как это не то.

3 голосов
/ 21 февраля 2012

Вам необходимо переместить возврат за пределы троичной операции.

return boolCondition ? toThisPlace() : 0 ; 
2 голосов
/ 21 февраля 2012

Тернарный оператор ?: ограничен в C #. Что вы можете сделать в этом случае:

return condition ? here : there;
2 голосов
/ 21 февраля 2012

Нет, это невозможно. return является заявлением; он не может быть частью выражения, что и ожидает ?:, троичный оператор (не логический оператор управления) во всех трех своих операндах. Вам придется использовать обычную форму. Не волнуйтесь, это хорошая вещь - в долгосрочной перспективе ваш код станет более читабельным.

2 голосов
/ 21 февраля 2012

Вы получили ваше заявление не по порядку.

Вместо

condition ? return here:return there;

, которое, как вы обнаружили, не компилируется, выполните

return condition ? here: there;
1 голос
/ 21 февраля 2012

Вы должны написать свое заявление таким образом

return condition ? here : there;
0 голосов
/ 21 февраля 2012

ваш код в порядке, единственная проблема в том, что вы читаете переменную i в условии и в то же время пытаетесь изменить значение переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...