'Namespace' wird aber wie ein 'Typ' verwendet

83

Dies ist mein Programm, das die Klasse verwendet. Es heißt Time2. Ich habe die Referenz zu TimeTest hinzugefügt. Ich erhalte immer wieder den Fehler 'Time2' ist ein 'Namespace', wird aber wie ein 'Typ' verwendet.

Könnte mir bitte jemand sagen, was dieser Fehler ist und wie er behoben werden kann?

namespace TimeTest
{
  class TimeTest
  {
    static void Main(string[] args)
    {
        Time2 t1 = new Time2();
    }
  }
}
Das Ass
quelle
8
Sie haben TimeTest.TimeTest eingegeben (und andere mögen es). Tu das nicht. Benennen Sie einen Typ nicht mit seinem Namespace, sondern erstellen Sie Mehrdeutigkeitsfehler.
Anthony Pegram
Weitere Informationen finden Sie unter: blogs.msdn.com/b/ericlippert/archive/2010/03/09/…
Anthony Pegram
1
Sie sollten Time2dieser Frage wirklich eine (abgespeckte) Erklärung hinzufügen , da dort wahrscheinlich das Problem liegt. Höchstwahrscheinlich haben Sie Time2in einem Namespace namensTime2
JerKimball
1
TheAce, bitte versuchen Sie beim nächsten Mal, ein minimales Beispiel bereitzustellen, das das Problem reproduziert. Ich habe nicht benötigte Zeilen entfernt. Bitte fügen Sie die Time2-Definition hinzu, um sie zu vervollständigen.
Alexei Levenkov

Antworten:

123

Ich vermute, Sie haben mindestens zweimal das gleiche Problem .

Hier:

namespace TimeTest
{
    class TimeTest
    {
}

... Sie deklarieren einen Typ mit demselben Namen wie der Namespace, in dem er sich befindet. Tun Sie das nicht.

Jetzt haben Sie anscheinend das gleiche Problem mit Time2. Ich vermute, wenn Sie hinzufügen:

using Time2;

In Ihre Liste der usingAnweisungen wird Ihr Code kompiliert. Aber bitte, bitte, bitte beheben Sie das größere Problem: die problematische Wahl der Namen. (Folgen Sie dem Link oben, um mehr darüber zu erfahren, warum dies eine schlechte Idee ist.)

(Außerdem würde ich Ihnen raten, dies nicht zu tun, es sei denn, Sie sind wirklich daran interessiert, zeitbasierte Typen zu schreiben ... und ich sage dies als jemand, der genau das tut . Verwenden Sie die integrierten Funktionen oder eine dritte Partybibliothek wie, ähm, meine . Die korrekte Arbeit mit Datum und Uhrzeit ist überraschend haarig. :)

Jon Skeet
quelle
1
Ich habe den Namespace-Namen geändert und das Problem behoben. Das ist wirklich seltsam, da es sich um den von VS2019 generierten Standardcode handelt.
Tim Melton
1
@ TimMelton: Nun, es ist die Standardeinstellung, wenn Sie den Namespace-Namen TimeTest und dann auch den Klassennamen TimeTest ausgewählt haben. Sie müssten beide gleich auswählen ...
Jon Skeet
Ich sehe das Problem jetzt. In dem Video, das ich mir angesehen habe, habe ich einen Ordner mit dem Namen Controller erstellt, in dem die Controller-Dateien abgelegt werden sollen. Hierher stammt Controller im Namespace. VS hängt den Ordnernamen automatisch an den Namespace an. Das Entfernen des Wortes Controller nach dem Namespace behebt das Problem.
Tim Melton
Das hat es behoben! Vielen Dank. Manchmal zeigt Visual Studio irreführende Fehlermeldungen an, die frustrierend sein können.
theITvideos
In meinem Fall habe ich es irgendwie geschafft, einen Verweis auf eine alte Bibliothek zu finden, die dieses überlappende Namensproblem hatte, von dem ich dachte, ich hätte es vor Jahren mit Feuer getötet.
Wildcat Matt
19
namespace TestApplication // Remove .Controller
{
    public class HomeController : Controller
    {
       public ActionResult Index()
        {
            return View();
        }
    }
}

Entfernen Sie das Controller-Wort aus namepsace

Shoba
quelle
Als keine Antwort markiert, habe ich sie bearbeitet, wenn ich die Frage nicht gelesen habe
Danh
1
Wenn Sie versuchen, von der Controller-Klasse im Microsoft.AspNetCore.Mvc-Namespace zu erben, wenn Ihr Ordner Controller und nicht Controller "s" heißt, haben Sie den endgültigen Namespace als Controller, der aufgrund des Namens des Namespace einen Fehler auslöst. Diese Antwort ist richtig und hat mir geholfen zu erkennen, dass ich dem Ordner Controller in meinem Projekt den falschen Namen gegeben habe.
Elek Guidolin
Dies hat mein Problem behoben. Danke für die sehr klare Antwort!
Carthax
1

Wenn Sie an einer großen App arbeiten und keine Namen ändern können, können Sie a .eingeben, um den gewünschten Typ aus dem Namespace auszuwählen:

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

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

Bitte überprüfen Sie, ob Ihr Klassen- und Namespace-Name identisch ist ...

Es passiert, wenn der Namespace und der Klassenname identisch sind. Machen Sie eine Sache, schreiben Sie den vollständigen Namen des Namespace, wenn Sie den Namespace verwenden möchten.

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
quelle
0

Ich hatte dieses Problem, als ich eine Klasse "Response.cs" in einem Ordner mit dem Namen "Response" erstellte. Also fing VS den new Response ()als Ordner / Namespace ab.

Also habe ich den Klassennamen in StatusResponse.cs geändert und angerufen. new StatusResponse()Dadurch wurde das Problem behoben.

Ani
quelle
0

Alle Antworten geben die Ursache an, aber manchmal besteht das größere Problem darin, alle Stellen zu identifizieren, die einen falschen Namespace definieren. Mit Tools wie Resharper, die den Namespace mithilfe der Ordnerstruktur automatisch anpassen, kann dieses Problem leicht auftreten.

Sie können alle Zeilen abrufen, die das Problem verursachen, indem Sie in Projekt / Lösung mit dem folgenden regulären Ausdruck suchen:

namespace .+\.TheNameUsedAsBothNamespaceAndType
Alexei
quelle
-3

wenn der Fehler ist

Zeile 26:
Zeile 27: @foreach (Kunden Kunde im Modell) Zeile 28: {Zeile 29:

Geben Sie den vollständigen Namensraum
wie @foreach an (Start.Models.customer-Kunde in Model).

Nelcon Croos
quelle