Usando Statement with Generics: usando ISet = System.Collections.Generic.ISet

Como uso dos espacios de nombres de colecciones generics diferentes ( System.Collections.Generic e Iesi.Collections.Generic ), tengo conflictos. En otras partes del proyecto, estoy usando el framework nunit y mstest, pero califico que cuando llamo a Assert quiero usar la versión nunit por

 using Assert = NUnit.Framework.Assert; 

Lo cual funciona muy bien, pero quiero hacer lo mismo con los tipos generics. Sin embargo, las siguientes líneas no funcionan

 using ISet = System.Collections.Generic.ISet; using ISet = System.Collections.Generic.ISet; 

¿Alguien sabe cómo decirle a .net cómo usar la statement de uso con generics?

Creo que es mejor que alias los espacios de nombres en lugar de los tipos generics (que no creo que sea posible).

Entonces, por ejemplo:

 using S = System.Collections.Generic; using I = Iesi.Collections.Generic; 

Luego, para un BCL ISet , por ejemplo:

 S.ISet integers = new S.HashSet(); 

Lamentablemente, la directiva de using no hace lo que desea. Puedes decir:

 using Frob = System.String; 

y

 using ListOfInts = System.Collections.Generic.List; 

pero no puedes decir

 using Blob = System.Collections.Generic.List 

o

  using Blob = System.Collections.Generic.List 

Es una deficiencia del lenguaje que nunca se ha rectificado.

La única forma de alias de un tipo genérico es especializándolo de la siguiente manera.

 using IntSet = System.Collections.Generic.ISet; 

No puede alias un tipo genérico abierto como lo ha hecho en su ejemplo:

 using MySet = System.Collections.Generic.ISet<>; 

Su nombre de alias es el mismo que el nombre de la clase en sí, por lo que todavía tiene ambigüedad, como si tuviera un using para cada espacio de nombres. Dale al alias de la clase un nombre diferente , es decir:

 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; } } 

Puede alias una clase haciendo:

 using Test = NameSpace.MyClass; 

Solo si la clase NO es genérica

En algunos casos puedes ir con herencia:

  public class MyList : List>, IComparable>> { } public void Meth() { var x = new MyList(); } 
Intereting Posts