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

В моем другом вопросе я нашел способ заставить этот синтаксис работать в редакторе MonoDevelop:

// hack to make MonoDevelop recognize nameof syntax from C#6.0
using nameof = System.Func<string>;

Компиляторы C# (Mono и VS) не выдают никаких предупреждений или ошибок, а также используют nameof Ключевое слово также работает нормально. У меня вопрос почему.

1 ответ

Я не адвокат по языкам, но я считаю, что причина того, что ваш код работает, заключается в том, что nameof это контекстное ключевое слово

Давайте вернемся к более общему случаю. Если вы попытаетесь создать using alias directive по ключевому слову if вы получаете ошибку...

using if = System.Func<string>;  // "CS1001: Identifier expected" error

... если вы не префикс имени с @...

using @if = System.Func<string>;  // No "CS1001: Identifier expected" error

Точно так же вы получаете ошибку CS1003, если вы пытаетесь объявить переменную типа aliased...

if foo = () => "Hello, World";  // "CS1003: Syntax error, '(' expected" error

... если вы не префикс имени с @ знак …

@if foo = () => "Hello, World";  // No "CS1003: Syntax error, '(' expected" error

С другой стороны, контекстные ключевые слова не должны начинаться с префикса @...

using nameof = System.Func<string>;

nameof bar = () => "Hello, World!";

Console.WriteLine(nameof(nameof));
Другие вопросы по тегам