由于我使用两个不同的通用集合名称空间(System.Collections.Generic
和Iesi.Collections.Generic
),因此存在冲突。在项目的其他部分,我使用的是nunit和mstest框架,但在我调用Assert
时我有资格使用nunit版本
using Assert = NUnit.Framework.Assert;
哪个很好用,但我想用泛型类型做同样的事情。但是,以下行不起作用
using ISet = System.Collections.Generic.ISet;
using ISet<> = System.Collections.Generic.ISet<>;
有没有人知道如何告诉.net如何使用带有泛型的using语句?
答案 0 :(得分:37)
不幸的是,using
指令没有按照您的意愿执行。你可以说:
using Frob = System.String;
和
using ListOfInts = System.Collections.Generic.List<System.Int32>;
但你不能说
using Blob<T> = System.Collections.Generic.List<T>
或
using Blob = System.Collections.Generic.List
这是从未纠正的语言的缺点。
答案 1 :(得分:35)
我认为你最好别名命名空间本身而不是泛型类型(我认为不可能)。
例如:
using S = System.Collections.Generic;
using I = Iesi.Collections.Generic;
然后是BCL ISet<int>
,例如:
S.ISet<int> integers = new S.HashSet<int>();
答案 2 :(得分:6)
您可以为泛型类别设置别名的唯一方法是将其专门化,如下所示。
using IntSet = System.Collections.Generic.ISet<int>;
您不能像在示例中那样使用开放泛型类型的别名:
using MySet = System.Collections.Generic.ISet<>;
答案 3 :(得分:3)
您的别名与类名本身相同,因此您仍然存在歧义,就像每个命名空间都有using
一样。给类的别名一个不同的名称,即:
using FirstNamespace;
using OtherObject = SecondNamespace.MyObject;
public class Foo
{
public void Bar()
{
MyObject first = new MyObject;//will be the MyObject from the first namespace
OtherObject second = new OtherObject;
}
}
答案 4 :(得分:0)
您可以为正在执行的课程别名:
using Test = NameSpace.MyClass;
仅当该类不是通用的时。
答案 5 :(得分:0)
在某些情况下,您可以使用继承:
public class MyList<T1, T2> : List<Tuple<IEnumerable<HashSet<T1>>, IComparable<T2>>> { }
public void Meth()
{
var x = new MyList<int, bool>();
}