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/