首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对泛型类型使用'using alias = class‘?

对泛型类型使用'using alias = class‘?
EN

Stack Overflow用户
提问于 2011-02-09 02:38:47
回答 2查看 32.8K关注 0票数 104

因此,有时我希望只包含名称空间中的一个类,而不是整个名称空间,就像下面的示例一样,我使用using语句为该类创建了一个别名:

代码语言:javascript
运行
复制
using System;
using System.Text;
using Array = System.Collections.ArrayList;

我经常使用泛型这样做,这样我就不必重复参数:

代码语言:javascript
运行
复制
using LookupDictionary = System.Collections.Generic.Dictionary<string, int>;

现在我想用泛型类型来实现同样的目的,同时将其保留为泛型类型:

代码语言:javascript
运行
复制
using List<T> = System.Collections.Generic.List<T>;

但是这不能编译,那么有什么方法可以在创建别名的同时将类型保留为泛型呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-09 02:39:47

不没有。C#中的类型别名必须是封闭(也称为完全解析)类型,因此不支持开放泛型

C#语言规范的9.4.1节对此进行了介绍。

使用别名的

可以命名封闭的构造类型,但不能在不提供类型参数的情况下命名未绑定的泛型类型声明。

代码语言:javascript
运行
复制
namespace N2
{
    using W = N1.A;         // Error, cannot name unbound generic type
    using X = N1.A.B;       // 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
}
票数 115
EN

Stack Overflow用户

发布于 2012-07-05 03:12:06

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

代码语言:javascript
运行
复制
using gen = System.Collections.Generic;
using GenList = System.Collections.Generic.List<int>;

然后使用

代码语言:javascript
运行
复制
gen::List<int> x = new gen::List<int>;

代码语言:javascript
运行
复制
GenList x = new GenList();

然而,你必须在你使用它们的每个文件中使用定义来复制它们,所以如果你在将来对它们做了一些更改,而忘记在每个文件中更新,事情将会很糟糕。

我希望将来C#能像do with扩展方法一样对待别名,并允许您在其他地方使用的文件中定义许多别名,然后在一个地方维护它们,并对类型使用者隐藏内部不必要的类型映射细节。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4936941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档