Laden...

The type conflicts with the namespace

Erstellt von unclesam vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.364 Views
U
unclesam Themenstarter:in
237 Beiträge seit 2007
vor 13 Jahren
The type conflicts with the namespace

Hallo,

ich habe eine Fehlermeldung, die mich ein wenig irritiert, denn ich dachte C# ist dort intelligenter.

The type 'PokerTrackerLib.Poker.Round' in 'PokerTracker\PokerTrackerLib\Poker\Round.cs' conflicts with the namespace 'PokerTrackerLib.Poker.Round' in 'PokerTracker\PokerTrackerLib\Poker\Round\Flop.cs'

Die Meldung erscheint im Konstruktor folgender Klasse (Hand.cs):


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace PokerTrackerLib.Poker
{
    class Hand
    {
        List<Poker.Round> rounds;

        public Hand()
        {
            rounds = new List<Poker.Round>();
        }
    }
}

Ich hänge auch noch ein Bild an um meine Klassenstruktur zu verstehen und den Grund der Fehlermeldung zu sehen.

Es ist ja eindeutig zu sehen, dass C# es nicht erlaubt, dass eine Klasse wie ein Namespace heißen darf. Ich finde diesen Umstand sehr verwirrend, denn für den Compiler sollte doch klar sein, dass ich im Konstruktor keine Liste eines Namespaces haben will, zumal ein paar Zeilen weiter drüber keine solche Meldung erscheint.

Fehlerbeschreibung in MSDN

Dies ist zwar nicht die gleiche Fehlermeldung und auch der Fehler tritt unter anderen Umständen auf, aber das ist das Einzige was ich dazu gefunden habe.
Als Lösung wird das Umbenennen der betroffenen Klassen und Namespaces vorgeschlagen. Für mich kommt dieser Ansatz aber erst mal nicht in Frage, denn ich habe ich ja für diesen Namespaceaufbau entschieden, da er für mich lesbarer ist.

Habe ich vielleicht grundlegende Guidlines missachtet, was zu meinem aktuellen Problem führt, oder ist dies wirklich auf schlechtes Design von C# zurückzuführen?

heute code ich, morgen debug ich und übermorgen cast ich die königin auf int

4.942 Beiträge seit 2008
vor 13 Jahren

Da deine Klasse 'Hand' ja schon im Namensbereich 'PokerTrackerLib.Poker' liegt, sollte dann nicht einfach


List<Round> rounds;

public Hand()
{
    rounds = new List<Round>();
}

reichen?

Trotzdem solltest du versuchen, die Namensbereich-/Klassenkollision aufzulösen.
Zur Not müßtest du entweder immer den gesamten Namensbereichpfad angeben bzw. einen using-Alias.

5.658 Beiträge seit 2006
vor 13 Jahren

Kein schlechtes Design von C#, denk mal an folgendes:


Round.Flop.Value = true;

Angenommen deine Klasse Round hat einen Property Flop mit einem Property namens Value. Außerdem hat die Klasse Flop auch einen (statischen) Property namens Value. Dann weiß der Kompiler eben nicht mehr, was gemeint ist. Deswegen gehts nicht.

Weeks of programming can save you hours of planning