`nameof()` 在当前上下文中不存在?

`nameof()` does not exist in the current context?

所以我想做的很简单。

我正在尝试 运行 对某些基本类型进行 nameof(),因为我需要这些常量来满足特定要求。

但是当我尝试为 nameof(bool) 这样做时,它说 nameof() 在当前上下文中不存在。

这似乎是所有同义词的情况?

有没有其他方法可以做到这一点,或者我错过了什么。

我想做的是

public static readonly string BoolConstant= nameof(bool); 

预期结果:

BoolConstant= "bool";

我是否必须写下所有这些常量?

nameof只适用于Type及其成员而不适用于关键字,bool是关键字,基本上bool是Boolean.

的缩写

尝试 nameof(Boolean),它有效。

根据MS Documentation,

nameof_expression
    : 'nameof' '(' named_entity ')'
    ;

named_entity
    : simple_name
    | named_entity_target '.' identifier type_argument_list?
    ;

named_entity_target
    : 'this'
    | 'base'
    | named_entity 
    | predefined_type 
    | qualified_alias_member
    ;

named_entity 可以是 simple_namesimple_name 可以是带有类型参数列表的标识符,在这个语法中没有任何地方说 named_entity 可以是 predefined_type, int, bool 等属于 predefined_type.

所以按照这个语法,

nameof(this) 不可以,但是 nameof(this.Property) 可以,同样在 nameof(..) 中不能使用关键字。我不知道原因,但似乎没有必要,而且它会使编译器更难以区分使用关键字的语法。

nameof本身也是关键字

C# 中的关键字列表 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

bool是一个关键词,你可以这样使用:

typeof(bool).Name;

nameof(Boolean)

两个结果相等 -> "Boolean"