2014-02-21 2 views
0

я пытаюсь применить свои знания ActionScript в C# и я интересно, если это возможно, чтобы сделать эти виды возврата заявлений:Логические операции по возвращению

return myObject ||= new Object(); 

Конечно, я могу использовать более длинную версию как:

if (!myObject) 
myObject = new Object(); 
return myObject; 

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

Я понял, что это все ECMAScript, он должен работать, но это не так. Может ли кто-нибудь указать, можно ли использовать логические операторы для имитации if-else вместо обычных операторов if-then-else?

версии .NET 3.5 (Unity3d двигатель)

+1

Если вы проголосуете, объясните, почему, поэтому пост может быть улучшен. Я не вижу ничего плохого в своем посте. –

+0

Ваша более длинная версия не работает, потому что в .NET объект не может быть неявно преобразован в bool (и условия должны быть логическими) – Georg

+0

1) В Unity3d он работает просто отлично 2) Object() в этом случае является просто экземпляр какого-либо класса, для всех, кого вы заботитесь, я мог бы назвать его T. –

ответ

7

Да, есть оператор COALESCE в C#, что делает почти точно это.

return myObject ?? new Object(); 

EDIT: Это не изменяет переменную myObject. Если вы хотите сделать это, а также, вы можете просто написать

return myObject = myObject ?? new Object(); 

потому назначение в C# также выражение, которое возвращает значение, которое было присвоено.

+0

о, ничего себе, я никогда не думал, что это будет так близко, прямо под моим носом, просто другой синтаксис. Благодаря! Я бы никогда не догадался использовать «??» –

+1

@CreativeMagic, почему вы догадались? вам нужно изучить синтаксис языка. – lisp

+1

Иногда некоторые символы «имеют смысл», будь то культурное перекрестное опыление или синестезия. Это также интересно догадаться. – luqui

2

эквивалент в C# является

return myObject ?? new Object(); 

Так что, похоже, как некоторые из операторов немного отличаются.

+1

Нет, после нового оператора всегда есть тип, а не имя переменной. – Georg

+0

@ Cheesebaron, вы сделали опечатку после «нового», она должна быть «Object()», пожалуйста, отредактируйте свой ответ;) –

Смежные вопросы