2017-08-17 92 views
1

如DRY(不要重复自己)一个狂热的信徒,我只是写了这个代码: 使用类型别名定义类型别名

我立刻得到错误,“类型‘SimpleDict’没有定义

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) 
“。在最后两行。有没有办法避免不必在我的类型别名中重复自己?

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

+1

您无法直接导入字符串类型字符串字符串。您应该首先将名称空间导入别名,然后为字典定义变量。 Imports SimpleDict = System.Colections.Generic dim newDict as new Dictionary(String,String) –

+0

我没有声明变量,我正在为类型定义别名,如下所示:https://docs.microsoft。 COM/EN-US/DOTNET /视觉基本/语言参考/报表/进口语句净命名空间和类型。 – samwyse

回答

1

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 
+0

我喜欢你的方法;这比我能想出的任何东西都要好。我会玩弄它,看看它是如何工作的。我有一些实用的功能,我可以将它们编入方法中,并且可以很好地处理这个问题。 – samwyse