在我的other question中,我发现了一个可在MonoDevelop编辑器中使此语法正常工作的技巧:
// hack to make MonoDevelop recognize nameof syntax from C#6.0
using nameof = System.Func<string>;
C#编译器(Mono和VS)不发出任何警告或错误,并且nameof
关键字的用法也可以正常工作。我的问题是为什么。
答案 0 :(得分:2)
我不是语言律师,但我相信您的代码有效的原因是nameof
是contextual keyword
让我们回到更一般的情况。如果您尝试为关键字if
创建一个using alias directive
,则会出现错误...
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
…除非您在名称前加上@
符号…
@if foo = () => "Hello, World"; // No "CS1003: Syntax error, '(' expected" error
另一方面,上下文关键字不需要 作为前缀@
…
using nameof = System.Func<string>;
nameof bar = () => "Hello, World!";
Console.WriteLine(nameof(nameof));