0

在我的另一个问题中,我发现了一个使此语法在 MonoDevelop 编辑器中工作的技巧:

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

C# 编译器(Mono 和 VS)不会给出任何警告或错误,并且nameof关键字的使用也正常工作。我的问题是为什么。

4

1 回答 1

2

不是语言律师,但我相信您的代码有效的原因是这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));
于 2018-07-21T22:46:37.127 回答