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.
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
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.
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