2012-09-28 20 views
11

Estaba tratando de obtener algo del código antiguo correctamente diseñado con stylecop. Pide poner las instrucciones de uso dentro. Funcionó bien para todos menos uno. Reduje el problema al siguiente código.Putting using statement dentro del espacio de nombres falla

namespace B.C 
{ 
    using System; 

    public class Hidden 
    { 
     public void SayHello() 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 
} 

namespace A.B.C 
{ 
    using B.C; 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      new Hidden().SayHello(); 
     } 
    } 
} 

esto da la compilación de error Error

"El tipo o espacio de nombres 'Ocultos' no se pudo encontrar (¿falta una directiva using o una referencia de ensamblado?)".

Si muevo usando B.C; sobre el espacio de nombres A.B.C luego se compila correctamente. La clase Hidden es desarrollada por un equipo diferente y no podemos modificarla.

+2

Quizás el espacio de nombre 'B.C' se evalúe incorrectamente a' A.B.C' cuando esté en el espacio de nombres 'A.B.C' scope? Cuando en el alcance global no sabe sobre ningún espacio de nombres, encuentra 'B' primero no asumiendo que es esa 'B' en' A' ('A.B'). –

Respuesta

15

Como está dentro del espacio de nombre A, entonces B.C será realmente A.B.C.

Uso global:: para especificar que está buscando desde la raíz:

using global::B.C; 
+0

+1 perfecto ..... – Habib

+0

+1 Buena explicación –

+2

También vale la pena señalar que esto funciona en todas partes para escapar del infierno del espacio de nombres, no solo en una declaración de uso. (por ejemplo, 'new global :: MyNS.BlahBlah()') –

2

B.C está en conflicto con A.B.C. Necesita cambiar el nombre de B.C a otra cosa o especificarlo con global

Cuestiones relacionadas