C# Enumerierung in Parameterliste

Nossi

Captain
Registriert
Okt. 2002
Beiträge
3.893
Ich entwickle zur Zeit eine Klasse "AccessReader". In einer Methode ("AddWhere") dieser Klasse möchte ich als Parameter eine Liste möglicher Werte übergeben, die bei der zukünftigen Verwendung dieser Klasse als Intellisense angezeigt werden.

Ich habe also eine Enumeriung geschaffen namens WhereField und sie als public deklariert

Code:
public enum WhereField { Equal = 1, Smaller, Greater, Smaller_or_Equal, Greater_or_Equal, Not };
Diese Enumeriung habe ich nun als Parameter in der betreffender Methode eingebunden.

Code:
public void AddWhere(String pField, WhereField Where, String pValue)
.

Das funktioniert auch prächtig. Allerdings muss ich nun beim Methodenaufruf aus einer Form den kompletten Pfad angeben um auf die Enumierung zuzugreifen.

Code:
            AccessReader Reader;
            Reader = new AccessReader();

            Reader.Init("TUser", false);
            Reader.AddField("Name", "TUser");
            Reader.AddField("Vorname", "TUser");

            Reader.AddWhere("Vorname", "TUser", [B]AccessReader.WhereField.Not[/B], "John");

Ich hatte jedoch gehofft, dass es so funktionieren würde wie unten angegeben und dass er mir auch die möglichen Werte per Intellisense direkt anzeigt:

Code:
             AccessReader Reader;
             Reader = new AccessReader();
 
             Reader.Init("TUser", false);
             Reader.AddField("Name", "TUser");
             Reader.AddField("Vorname", "TUser");
 
             Reader.AddWhere("Vorname", "TUser", [B]Not[/B], "John");

Was muss ich anstellen ?
 
Nein das geht nicht. Wie soll der Compiler das auflösen, zu welcher Klasse dein Enum gehört?
Da musst du leider den vollen Namen angeben. Das läuft ja im .NET Framework nich anders.
 
Ich weiß, dass sowas in vb6 möglich ist. Daher ging ich davon aus, dass es auch unter .net funktioniert.

Gibt es andere Möglichkeiten um zum gewünschten Ergebnis zu kommen ?
Es geht dabei in erster Linie um die Intellisense, nicht um die Enumerierung, die ist nur Mittel zum Zweck ;)
 
Natürlich hat er das, ansonsten müsste er nicht den full-qualified Name angeben. Wenn er das Enum außerhalb definiert ändert das nichts an der Tatsache das er trotzdem "WhereField.Not" schreiben muss.
 
könnte auch das Namespace sein... WhereField.Not ist immer noch besser als AccessReader.WhereField.Not, zudem bin ich der Meinung das man öffentliche Strukturen und Klassen nicht innerhalb einer Klasse definieren sollte.
 
toeffi schrieb:
Intellisense unterstützt dich doch schon dabei und löst die Enumeration für dich auf,bzw den Pfad zu der Enumeration.

Klar ;)
Es geht einfach um Komfort und Übersicht.
Ich kenn es aus vb6 so, dass man direkt alle möglichen Parameterwerte angezeigt bekommt ohne Pfad und hatte gehofft dass es in .net ebenfalls funktioniert.
Ergänzung ()

Namespace ist übrigens der selbe.
 
Nope, geht leider nicht in C#. Ich muss auch ehrlich sagen das ich es mit EnumName wesentlich übersichtlicher finde, so muss man nich noch extra die Definition des Enums suchen.Was willst du überhaupt bauen?
 
AccessReader erstellt über div. Methoden einen SQL String, der anschliessend einen OleDBDataReader initialisiert mit dem man auf eine AccessDatenbank zugreift. Natürlich könnte man auch schlicht den nackten OleDBDataReader nehmen, allerdings kann man die SQL Strings dann nicht dynamisch erstellen sondern hat jedesmal hardcoded die Strings im Code stehen.
 
Habe mich mit LINQ noch nicht großartig beschäftigt, im übrigen ist der AccessReader eine Adaption einer uralten vb6-Klasse, die wir im Betrieb nutzen, die ich grade nach C# übersetze für ein kleines Projekt. Das ganze soll an sich dementsprechend an der Vorlage orientieren.
 
Zurück
Oben