'espacio de nombres' pero se usa como un 'tipo'

83

Este es mi programa que usa la clase se llama Time2 Tengo la referencia agregada a TimeTest Sigo recibiendo el error 'Time2' es un 'espacio de nombres' pero se usa como un 'tipo'

¿Podría alguien decirme qué es este error y cómo solucionarlo?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}
El as
fuente
8
Tienes el tipo TimeTest.TimeTest (y otros similares). No hagas eso. No nombre un tipo igual que su espacio de nombres, crea errores de ambigüedad.
Anthony Pegram
Para obtener más información, consulte: blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
Anthony Pegram
1
Realmente debería agregar una declaración (simplificada) de Time2a esta pregunta, ya que probablemente ahí radique el problema. Lo más probable es que tienes Time2definido en un espacio de nombres llamadoTime2
JerKimball
1
TheAce, la próxima vez intente proporcionar una muestra mínima que reproduzca el problema. Eliminé las líneas que no son necesarias, agregue la definición de Time2 para completarla.
Alexei Levenkov

Respuestas:

123

Sospecho que tienes el mismo problema al menos dos veces .

Aquí:

namespace TimeTest
{
    class TimeTest
    {
}

... estás declarando un tipo con el mismo nombre que el espacio de nombres en el que se encuentra. No hagas eso.

Ahora aparentemente tienes el mismo problema con Time2. Yo sospecho que si se agrega:

using Time2;

a su lista de usingdirectivas, su código se compilará. Pero, por favor, solucione el problema más grande: la elección problemática de los nombres. (Siga el enlace de arriba para conocer más detalles de por qué es una mala idea).

(Además, a menos que esté realmente interesado en escribir tipos basados ​​en el tiempo, le aconsejo que no lo haga ... y lo digo como alguien que hace exactamente eso. Utilice las capacidades integradas o una tercera biblioteca de fiestas como, um, la mía . Trabajar con fechas y horas correctamente es sorprendentemente complicado. :)

Jon Skeet
fuente
1
Cambié el nombre del espacio de nombres y solucioné el problema. Eso es realmente extraño porque es el código predeterminado generado por VS2019.
Tim Melton
1
@TimMelton: Bueno, será el predeterminado si eligió el nombre del espacio de nombres TimeTest y luego eligió el nombre de la clase TimeTest también. Habría que recoger a ambos la misma ...
Jon Skeet
Ahora veo el problema. el video que estaba viendo me hizo crear una carpeta llamada Controller para poner los archivos de Controller. Aquí es de donde viene Controller en el espacio de nombres. VS agrega automáticamente el nombre de la carpeta al espacio de nombres. Eliminar la palabra Controlador después del Espacio de nombres soluciona el problema.
Tim Melton
¡Eso lo arregló! Gracias. a veces, Visual Studio muestra algunos mensajes de error engañosos que pueden resultar frustrantes.
theITvideos
En mi caso, de alguna manera logré obtener una referencia a una biblioteca antigua que tenía este problema de nombres superpuestos que pensé que había matado con fuego hace años.
Wildcat Matt
19
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

Eliminar la palabra del controlador de namepsace

shoba
fuente
Marcado como no una respuesta, lo edité cuando no había leído la pregunta
Danh
1
Cuando intenta heredar de la clase Controller en el espacio de nombres Microsoft.AspNetCore.Mvc, si su carpeta se llama Controller y no Controller "s", tiene el espacio de nombres final como Controller que arroja un error debido al nombre del espacio de nombres. Esta respuesta es correcta y me ayudó a ver que le di un nombre incorrecto a la carpeta Controladores en mi proyecto.
Elek Guidolin
Esto solucionó mi problema. ¡Gracias por la respuesta tan clara!
Carthax
1

Si está trabajando en una aplicación grande y no puede cambiar ningún nombre, puede escribir a .para seleccionar el tipo que desea en el espacio de nombres:

namespace Company.Core.Context{
  public partial class Context : Database Context {
    ...
  }
}
...

using Company.Core.Context;
someFunction(){
 var c = new Context.Context();
}
James L.
fuente
0

Compruebe que el nombre de su clase y espacio de nombres sea el mismo ...

Sucede cuando el espacio de nombres y el nombre de la clase son iguales. Haga una cosa: escriba el nombre completo del espacio de nombres cuando desee utilizar el espacio de nombres.

using Student.Models.Db;

namespace Student.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            List<Student> student = null;
            return View();
        }
    }
Muhammad Usama Arshad
fuente
0

Tuve este problema cuando creé una clase "Response.cs" dentro de una carpeta llamada "Respuesta". Entonces VS estaba capturando el new Response ()espacio de nombres Carpeta /.

Así que cambié el nombre de la clase a StatusResponse.cs y llamé new StatusResponse(). Esto resolvió el problema.

Y yo
fuente
0

Todas las respuestas indican la causa, pero a veces el mayor problema es identificar todos los lugares que definen un espacio de nombres inadecuado. Con herramientas como Resharper que ajustan automáticamente el espacio de nombres utilizando la estructura de carpetas, es bastante fácil encontrar este problema.

Puede obtener todas las líneas que crean el problema buscando en proyecto / solución usando la siguiente expresión regular:

namespace .+\.TheNameUsedAsBothNamespaceAndType
Alexei
fuente
-3

si el error es

Línea 26:
Línea 27: @foreach (Clientes cliente en Modelo) Línea 28: {Línea 29:

proporcione el espacio de nombre completo
como @foreach (Start.Models.customer customer in Model)

Nelcon Croos
fuente