问题标签 [nameof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 为什么 nameof 不能与根级别的别名限定类型一起使用?
想象一下根命名空间级别的类型(可能在默认global
空间中,或者可能是一个extern alias
)。
使用别名前缀时,似乎无法通过 引用此类型。nameof()
它适用于typeof
, 和 viausing
别名(尽管nameof
在using
别名上产生别名,而不是类型名)。带有 CS8083 的编译器对象,“别名限定名称不是表达式。”
但是:这是有原因的吗?这是为了防止一些模糊的问题场景吗?或满足一些规格要求?或者它可能是一个编译器错误?我也很满意地注意到我们通常不应该在命名空间根中声明类型——CA1050
这是非常正确的;但这不是重点:)
完整示例如下;请注意,在此示例中使用两个项目进行using
别名检查,但为简单起见,所有涉及的内容C
都可以忽略以进行简单调查。
whereC
在单独的程序集中定义并使用指定为 的别名引用foo
,并且很简单:
编辑:就规范而言,这归结为https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/expressions#nameof-expressions,其中 anameof_expression
必须是simple_name
(它不是)或named_entity_target '.' identifier type_argument_list?
- 所以:对于所有不是简单名称的情况,必须有.something
- 但我想这里的根本问题是为什么必须有 a .something
, 而其他一些允许的结构global::Foo
?例如: