所以我想做的很简单。
我正在nameof()
某些基本类型上运行A ,因为我需要这些常量来满足特定需求。
但是当我尝试这样做时,例如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://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/