所以我想做的很简单。
我正试图在一些基元类型上运行nameof()
,因为我需要这些常量来满足特定的需求。
但当我尝试为例如nameof(bool)
这样做时,它表明nameof()
在当前上下文中不存在。
所有同义词似乎都是这样?
有没有其他方法可以做到这一点,或者我错过了什么。
我想做的是
public static readonly string BoolConstant= nameof(bool);
预期结果:
BoolConstant= "bool";
我必须把这些常数都写下来吗?
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://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/
bool
是一个关键字,您可以这样使用:
typeof(bool).Name;
或
nameof(Boolean)
两个结果相等->"布尔">