首页 > 解决方案 > 类型别名可以用来定义类型别名吗?

问题描述

我尝试通过使用另一个类型别名来定义类型别名,如下所示:

using pairs = Dictionary<string, int>;
using allPairs = Dictionary<string, pairs>;

并收到此错误消息:

error CS0246: The type or namespace name 'pairs' could not be found (are you missing a using directive or an assembly reference?

为什么这是一个错误,是否有解决方法?

标签: c#.net-core

解决方案


在 using 指令的声明中不能使用using别名。根据c# 规范

写入的顺序using_alias_directives没有意义,namespace_or_type_name a 引用的解析using_alias_directive不受其 using_alias_directive自身或直接包含的编译单元或命名空间主体中的其他 using_directives 的影响。

换句话说,编译器using alias directives在给定的声明空间中单独处理每个。在同一声明空间内进行这种隔离处理的结果,导致不知道alias给定声明空间中是否存在其他人。因此,当您alias在 another中引用时using directive,编译器不知道是否存在引用的别名。

using pairs = Dictionary<string, int>;
using allPairs = Dictionary<string, pairs>;

在上述代码中,第二行将导致编译时错误,因为它不受第一个 using alias 指令的影响。


推荐阅读