3

所以我想做的很简单。

我正在尝试nameof()在一些原始类型上运行 a,因为我需要这些常量来满足特定要求。

但是当我尝试这样做时,例如nameof(bool)它说nameof()在当前上下文中不存在。

这似乎是所有同义词的情况?

有没有其他方法可以做到这一点,或者我错过了什么。

我想做的是

public static readonly string BoolConstant= nameof(bool); 

预期结果:

BoolConstant= "bool";

我必须写下所有这些常量吗?

4

2 回答 2

6

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_typeint, bool等等predefined_type

所以按照这个语法,

nameof(this)是不可接受的,但是nameof(this.Property),同样不能在里面使用关键字nameof(..)。我不知道原因,但这似乎没有必要,而且它会使编译器更复杂地区分使用关键字的语法。

nameof本身也是关键字

C# 中的关键字列表 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/

于 2019-11-14T07:23:28.700 回答
3

bool是一个关键字,你可以这样使用:

typeof(bool).Name;

或者

nameof(Boolean)

两个结果都相等->“布尔”

于 2019-11-14T07:36:21.030 回答