使用类型别名来定义类型别名

时间:2017-08-17 13:07:42

标签: vb.net

作为DRY的狂热信徒(不要重复自己),我只是写了这段代码:

Imports SimpleDict = System.Collections.Generic.Dictionary(Of String, String)
Imports ListOfSimpleDicts = System.Collections.Generic.List(Of SimpleDict)
Imports DictOfSimpleDicts = System.Collections.Generic.Dictionary(Of String, SimpleDict)

我立即收到错误,"输入' SimpleDict'没有定义。"在最后两行。有没有办法避免在我的类型别名中重复自己?

[附录] 24小时后,我不得不将SimpleDict更改为别名Dictionary(Of String,HashSet)。好消息是,由于我使用了别名,我的更改会传播到我使用它的所有地方,但遗憾的是我仍然需要自己更改其他两行。

1 个答案:

答案 0 :(得分:2)

From the VB specification

  

Imports语句使源文件中的名称可用,但不是   在全局命名空间的声明空间中声明任何内容。该   Imports语句导入的名称范围扩展到   源文件中包含的命名空间成员声明。范围   Imports语句特别不包括其他Imports   语句,也不包括其他源文件。 导入声明   可能不会互相引用。

     

在此示例中,最后一个Imports语句出错,因为它不受第一次导入的影响   别名。

Imports R1 = N1 ' OK.
Imports R2 = N1.N2 ' OK.
Imports R3 = R1.N2 ' Error: Can't refer to R1.

我不确定你能做什么。我唯一能想到的就是将SimpleDict定义为System.Collections.Generic.Dictionary(Of String, String)类,不确定这是否适合您,因为您必须创建一个类。

Imports ListOfSimpleDicts = System.Collections.Generic.List(Of RootNamespace.SimpleDict)
Imports DictOfSimpleDicts = System.Collections.Generic.Dictionary(Of String, RootNamespace.SimpleDict)

Public Class SimpleDict
    Inherits System.Collections.Generic.Dictionary(Of String, String)
End Class