提问人:SzymonPajzert 提问时间:9/1/2017 最后编辑:RobSzymonPajzert 更新时间:5/8/2023 访问量:293
嵌套类型定义的 Using 指令
Using directive for nested type definitions
问:
我正在尝试使用该指令以函数式方式定义类型,以使代码更具可读性。假设我的示例 .cs 文件如下所示:using
using A = System.Tuple<int, int>;
using B = List<A>;
我收到错误:
CS0246:找不到类型或命名空间名称“A”(是否缺少 using 指令或程序集引用?
我可以定义嵌套类型吗?using
答:
learn.microsoft.com 上的 C# 语言规范有一个部分介绍了 Using 指令,具体来说,您尝试使用的 using 指令类型是“Using alias 指令”:
using_alias_directive(使用别名指令)为命名空间或类型引入别名。
该文档突出显示了允许的using_alias_directive结构,如下所示:
using_alias_directive
: 'using' identifier '=' namespace_or_type_name ';'
;
请注意,这只允许使用“namespace_or_type_name”,但不允许使用另一个“using_alias_directive”。其中一个可能的原因,可以在他们的文档中找到(强调我的):
using_alias_directives的编写顺序没有意义,using_alias_directive引用的namespace_or_type_name的解析不受using_alias_directive本身或立即包含的编译单元或命名空间主体中的其他using_directives的影响。换言之,using_alias_directive的namespace_or_type_name被解析为立即包含的编译单元或命名空间正文没有using_directives
简而言之,恐怕您不能在另一个别名中使用别名。
评论
using
在 C# 12 预览版中,可以允许使用 alias 指令引用任何类型的 Type。
从 C# 12 开始,可以为以前受限制的类型创建别名,包括元组类型、指针类型和其他不安全类型。有关 udpated 规则的更多信息。
评论
using B = System.Collections.Generic.List<System.Tuple<int, int>>;
.使用 using 时,您不能使用其他 using,请始终完全指定类型名称。你在定义时已经经历过这一点,不是吗? 无法修复错误。A
using System;