2009-03-06 15 views
14

Wyszukałem mało prawdopodobny scenariusz, gdy odwołuję się do dwóch zewnętrznych zespołów, które mają te same nazwy przestrzeni nazw i typu. Kiedy próbuję użyć typu, kompilator zgłasza błąd, którego nie może rozwiązać, którego chcę użyć.Jak uzyskać operator aliasu przestrzeni nazw :: do pracy w C#?

Widzę, że C# oferuje mechanizm do używania aliasów dla odniesień. Możesz nawet określić te aliasy za pomocą okna odniesienia w Visual Studio 2008. Property Jak używać tego aliasu w moim kodzie? Jak rozumiem, powinienem być za pomocą operatora ::, ale nie powiedzie się z powodu następującego błędu:

CS0432 - Alias not found

Zazwyczaj . operator nie tak dobrze.

W oknie wyjściowym widzę, że kompilator dostaje poprawnie przekazany alias w wierszu poleceń.

Wszelkie wskazówki na temat tego, co może być w stanie wypróbować, są bardzo mile widziane.

+0

czy możesz rozwinąć ten jeden? Działa TO, jeśli wpiszesz całą przestrzeń nazw – Grzenio

Odpowiedz

16
extern alias alias1; 
using alias1::Namespace; 
+0

Może to być użyte do obejścia metody wokół CS0433 (błąd kompilatora C#). http://msdn.microsoft.com/en-us/library/64wh5743(VS.100).aspx – RandomNickName42

+0

Właśnie zauważyłem, że jest to 1 numer błędu z pytania "Gortok" tutaj, zabawne. – RandomNickName42

+2

Musisz także zmienić właściwość aliasów z assemblem z "global" na "global, alias1". – Spiralis

3

Spróbuj tego:

extern alias asm1; 
extern alias asm2; 

namespace Client 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      asm1.MyNs.MyClass mc1 = null; 
      asm2.MyNs.MyClass mc2 = null; 
     } 
    } 
} 

I dodać global,asm1 w odniesieniu do projektu i global,asm2 assembly1 dla assembly2

3

Myślę, że trzeba użyć extern alias. Anson Horton ma dobry blog na temat tego problemu i jak go użyć zewnętrzny alias, aby to naprawić.

-1

Kiedy odwołujesz się do jakiegoś zespołu w projekcie, ma on domyślny alias "globalny". Po dodaniu innego aliasu dla tego zespołu, np. "Globalne, AssemblyA", będzie odwoływać się do niej tak:

using SomeTypeAlias = AssemblyA::Company.Product.SomeType; 

lub: ". Operator zwykle nie tak dobrze"

void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... } 
Powiązane problemy