2010-05-26 1 views
11

Je rencontre un problème dans lequel je ne peux pas faire référence à une classe dans un espace de noms différent. J'ai 2 classes:C#: Problème lors de la tentative de résolution d'une classe lorsque deux espaces de noms sont similaires

namespace Foo 
{ 
    public class Class1 { ... } 
} 

namespace My.App.Foo 
{ 
    public class Class2 
    { 
     public void SomeMethod() 
     { 
      var x = new Foo.Class1; // compile error! 
     } 
    } 
} 

L'erreur de compilation est:

Le type ou le nom namespace 'Class1' n'existe pas dans l'espace de noms 'My.App.Foo'

Dans cette situation, je n'arrive pas à voir Visual Studio reconnaître que "Foo.Class1" fait référence à la première classe. Si je souris sur « Foo », il montre que son essayant de résoudre ce à « My.App.Foo.Class1 »

Si je mets la ligne:

using Foo; 

en haut de la. fichier cs qui contient Class2, puis il résout cela à "My.App.Foo".

Y a-t-il une astuce pour faire référence à l'espace de noms "Foo" juste sans simplement renommer les espaces de noms afin qu'ils ne soient pas en conflit? Ces deux espaces de noms sont dans le même assembly.

Répondre

28

Vous pouvez utiliser global:: pour qualifier globalement un espace de noms: global::Foo.Class1 devrait fonctionner.

Vous pouvez également utiliser l'alias global::Foo pour faciliter les choses. En haut de votre fichier source, en dessous de votre aide d'instructions, ajoutez:

using AliasClass1=global::Foo.Class1; 

Maintenant, vous pouvez utiliser:

AliasClass1 c = new AliasClass1(); 
// and so on. 

Bien sûr, vous pouvez utiliser un meilleur nom que AliasClass :-)

+1

ding ding ding - couper l'homme un chèque. –

+1

Cela ne fonctionne pas dans mon environnement. Je pense que vous devez avoir global avant le: – BlueMonkMN

+0

@BlueMonkMN - oui j'ai rangé cela tout à l'heure. – LBushkin

Questions connexes