nameof只适用于 Type 及其成员,不适用于关键字,bool是关键字,基本上是 bool 的缩写Boolean。
试试看nameof(Boolean),行得通。
根据MS 文档,
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_name,并且simple_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/