Почему я не могу использовать «новое» выражение как оператор в VB.NET? - PullRequest
4 голосов
/ 24 декабря 2010

Почему я не могу начать строку с круглых скобок, за которыми следует ключевое слово new ?? Например:

(New <custom_obj>).foo(var)

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

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

1 Ответ

4 голосов
/ 24 декабря 2010

Хотите ответ от адвоката? Посмотрите в Спецификации языка VB.NET, начиная с 10. Заявления . Самый простой ответ заключается в том, что слово «Выражение» не появляется на этой странице. NewExpression явно отличается от InvocationExpression, поэтому вы можете использовать InvocationExpression в InvocationStatement, но вы можете использовать NewExpression только в LocalDeclarationStatement или в контексте некоторого большего выражения.

Скорее всего, синтаксис VB.NET разработан так, чтобы его было легко читать, писать и анализировать, и одним из способов достижения этого является осторожность в отношении того, что такое оператор и что такое выражение. Python похож - присваивание является оператором, а не выражением. Нет причин для того, чтобы каждый язык был в точности как C.

Но , как указывает chibacity, вы можете обойти это с помощью оператора Call:

call new object.toString

успешно скомпилируется. Вместо этого попытайтесь придать смысл своим занятиям.

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