问题标签 [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.

0 投票
1 回答
1382 浏览

c# - 为什么 nameof 不能与根级别的别名限定类型一起使用?

想象一下根命名空间级别的类型(可能在默认global空间中,或者可能是一个extern alias)。

使用别名前缀时,似乎无法通过 引用此类型。nameof()它适用于typeof, 和 viausing别名(尽管nameofusing别名上产生别名,而不是类型名)。带有 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?例如: