2010-05-26 14 views
11

Me encuentro con un problema donde no puedo hacer una referencia a una clase en un espacio de nombres diferente. Tengo 2 clases:C#: Problema al intentar resolver una clase cuando dos espacios de nombres son similares

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

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

El error de compilación es:

El tipo o espacio de nombres 'Clase 1' no existe en el espacio de nombres 'My.App.Foo'

En esta situación, parece que no logro que Visual Studio reconozca que "Foo.Class1" hace referencia a la primera clase. Si el ratón sobre "Foo", muestra que su tratando de resolver que a "My.App.Foo.Class1"

Si pongo la línea:

using Foo; 

en la parte superior de la. archivo cs que contiene Class2, luego también lo resuelve en "My.App.Foo".

¿Hay algún truco para hacer referencia al espacio de nombres "Foo" correcto sin cambiar el nombre de los espacios de nombres para que no entren en conflicto? Ambos espacios de nombres están en el mismo ensamblaje.

Respuesta

28

Puede usar global:: para calificar globalmente un espacio de nombres: global::Foo.Class1 debería funcionar ,.

También puede alias global::Foo para hacer las cosas más fáciles. En la parte superior de su archivo fuente, por debajo de su uso de declaraciones, añadir:

using AliasClass1=global::Foo.Class1; 

Ahora puede utilizar:

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

Por supuesto, se puede utilizar un nombre mejor que AliasClass :-)

+1

ding ding ding - cortar el hombre un cheque. –

+1

Eso no funciona en mi entorno. Creo que necesitas tener global antes que el :: – BlueMonkMN

+0

@BlueMonkMN - sí, lo arreglé justo ahora. – LBushkin

Cuestiones relacionadas