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



所以我想做的很简单。

我正试图在一些基元类型上运行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_namesimple_name可以是带类型参数列表的标识符,但在本语法中,named_entity不能是predefined_typeint, 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)

两个结果相等->"布尔">

相关内容

  • 没有找到相关文章

最新更新