在genericstypes中使用'using alias = class'?

所以有时我只想从命名空间中包含一个类而不是整个命名空间,就像这里的例子,我使用using语句为该类创build一个别名:

using System; using System.Text; using Array = System.Collections.ArrayList; 

我经常用generics来做这件事,所以我不必重复这些论点:

 using LookupDictionary = System.Collections.Generic.Dictionary<string, int>; 

现在我想用一个generics来完成同样的工作,同时把它作为一个generics来保存:

 using List<T> = System.Collections.Generic.List<T>; 

但是,这不能编译,所以有什么办法来实现创build这个别名,而types为通用?

不,那里没有。 C#中的types别名必须是一个封闭的(完全parsing的)types,所以不支持开放generics

这在C#语言规范的第9.4.1节中有介绍。

使用别名可以命名一个封闭的构造types,但不能提供未绑定的genericstypes声明而不提供types参数。

 namespace N2 { using W = N1.A; // Error, cannot name unbound generic type using X = N1.AB; // Error, cannot name unbound generic type using Y = N1.A<int>; // Ok, can name closed constructed type using Z<T> = N1.A<T>; // Error, using alias cannot have type parameters } 

http://msdn.microsoft.com/en-us/library/sf0df423.aspx和http://msdn.microsoft.com/en-us/library/c3ay4x3d%28VS.80%29.aspx所示,您可以做;

 using gen = System.Collections.Generic; using GenList = System.Collections.Generic.List<int>; 

然后使用

 gen::List<int> x = new gen::List<int>; 

要么

 GenList x = new GenList(); 

但是,您必须在每个使用它们的文件中复制这些定义,因此如果将来对它们进行了一些更改,并忘记在每个文件中进行更新,那么情况将会很糟糕。

我希望C#将来会像使用扩展方法一样处理别名,并让你在其他地方使用的文件中定义许多别名,然后将它们保留在一个地方,并从types使用者中隐藏内部不必要的types映射细节。