`nameof()` 在当前上下文中不存在?
`nameof()` does not exist in the current context?
所以我想做的很简单。
我正在尝试 运行 对某些基本类型进行 nameof()
,因为我需要这些常量来满足特定要求。
但是当我尝试为 nameof(bool)
这样做时,它说 nameof()
在当前上下文中不存在。
这似乎是所有同义词的情况?
有没有其他方法可以做到这一点,或者我错过了什么。
我想做的是
public static readonly string BoolConstant= nameof(bool);
预期结果:
BoolConstant= "bool";
我是否必须写下所有这些常量?
nameof
只适用于Type及其成员而不适用于关键字,bool
是关键字,基本上bool是Boolean
.
的缩写
尝试 nameof(Boolean)
,它有效。
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/
bool
是一个关键词,你可以这样使用:
typeof(bool).Name;
或
nameof(Boolean)
两个结果相等 -> "Boolean"
所以我想做的很简单。
我正在尝试 运行 对某些基本类型进行 nameof()
,因为我需要这些常量来满足特定要求。
但是当我尝试为 nameof(bool)
这样做时,它说 nameof()
在当前上下文中不存在。
这似乎是所有同义词的情况?
有没有其他方法可以做到这一点,或者我错过了什么。
我想做的是
public static readonly string BoolConstant= nameof(bool);
预期结果:
BoolConstant= "bool";
我是否必须写下所有这些常量?
nameof
只适用于Type及其成员而不适用于关键字,bool
是关键字,基本上bool是Boolean
.
尝试 nameof(Boolean)
,它有效。
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/
bool
是一个关键词,你可以这样使用:
typeof(bool).Name;
或
nameof(Boolean)
两个结果相等 -> "Boolean"