在我的另一个问题中,我发现了一个使此语法在 MonoDevelop 编辑器中工作的技巧:
// hack to make MonoDevelop recognize nameof syntax from C#6.0
using nameof = System.Func<string>;
C# 编译器(Mono 和 VS)不会给出任何警告或错误,并且nameof
关键字的使用也正常工作。我的问题是为什么。
我不是语言律师,但我相信您的代码有效的原因是这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 错误...
if foo = () => "Hello, World"; // "CS1003: Syntax error, '(' expected" error
…除非你在名字前面加上一个@
符号…</p>
@if foo = () => "Hello, World"; // No "CS1003: Syntax error, '(' expected" error
另一方面,上下文关键字不需要以@
…为前缀</p>
using nameof = System.Func<string>;
nameof bar = () => "Hello, World!";
Console.WriteLine(nameof(nameof));