【发布时间】:2010-09-15 17:40:56
【问题描述】:
由于我使用了两个不同的通用集合命名空间(System.Collections.Generic 和 Iesi.Collections.Generic),因此我遇到了冲突。在项目的其他部分,我同时使用 nunit 和 mstest 框架,但是当我调用 Assert 时,我想通过
using Assert = NUnit.Framework.Assert;
这很好用,但我想对泛型类型做同样的事情。但是,以下几行不起作用
using ISet = System.Collections.Generic.ISet;
using ISet<> = System.Collections.Generic.ISet<>;
有谁知道如何告诉 .net 如何将 using 语句与泛型一起使用?
【问题讨论】:
-
这是一个偶尔需要的功能。长期以来,它一直在可能的功能列表中,但从未得到足够高的优先级来实际实施。
-
Eric,这是我第一次遇到这个问题,因为 .net 4.0 框架添加了 ISet,并且 Iesi.Collections dll 以 3.5 为目标。通常,其他开发人员会很好地避免与标准 .net 命名发生冲突。
-
为什么将它放在两个不同的命名空间中?你能提供更多信息吗?
-
我会换一种说法。故意为两个不同的事物使用相同的名称会很不方便。如果您极不可能同时成为
using两个命名空间,则此方法效果最佳。 -
@EricLippert 从 Java 或 Haskell 或其他支持精确符号导入的语言(即 Java 中的
import myModule.MyClass;)转换代码时,我发现这是 C# 的一个主要缺陷,因为你必须using一切来自System.Collections.Generic,即使您的LINQ 表达式只需要IEnumerable<>。Java 不允许重命名,但我认为导入重命名实际上是“偶尔”请求的,而不是精确的导入/使用。
标签: c# generics syntax alias using