Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Objekte über Properties und als Array zur Verfügung stellen
Offensiv
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

Objekte über Properties und als Array zur Verfügung stellen

beantworten | zitieren | melden

Hallo,

habe ein Problem mit einer Zuweisung, bzw. habe es nicht hinbekommen.
Würde mir gerne die 3 Operator-Variablen (opGleich...) direkt im Array-Initialisierer von Operators eingeben.

Und zweitens die Zuweisung in Main wie gezeigt hinbekommen.

Grüße Mirko


namespace struc_test01
{
    class Program
    {
        
        
        public struct Operator
        {
            public string value;
            public string description;
        };

        // diese 3 würde ich gerne direkt im Arrayinitialisierer 
        // von Operators eingeben
        public static Operator opGleich = new Operator { value = "=", description = "gleich" };
        public static Operator opUngleich = new Operator { value = "<>", description = "ungleich" };
        public static Operator opGroesser = new Operator { value = ">", description = "größer" };

        public static Operator[] Operators = { opGleich, opUngleich, opGroesser };
        
        
        static void Main(string[] args)
        {
            
            // verschiedene Zuweisungen
            // OK
            Operator myOP1 = opGleich;
            Operator myOP2 = Operators[0];

            // so würde ich es gerne zuweisen. geht das überhaupt mit einem Array?
            // nicht OK
            Operator myOP3 = Operators.opGleich;
        }
    }
}
private Nachricht | Beiträge des Benutzers
Grumbler85
myCSharp.de - Member



Dabei seit:
Beiträge: 550
Herkunft: Rheingau Taunus

beantworten | zitieren | melden

Ich vermute mal du müsstest eher so etwas hier machen:


public static Operator opGleich {
get { return new Operator { value = "=", description = "gleich" } }
}
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
private Nachricht | Beiträge des Benutzers
Aratar
myCSharp.de - Member



Dabei seit:
Beiträge: 126

beantworten | zitieren | melden

Hallo,

1. Finde ich deine Benennung suboptimal, value würde ich nicht als Namen verwenden, da er schon eine andere Bedeutung hat.
2. Was machst du überhaupt? Für was brauchst du so etwas? Ich kann mir keinen Fall vorstellen, für den so etwas sinnvoll ist.

Mfg
Aratar
private Nachricht | Beiträge des Benutzers
Offensiv
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

Zitat von Grumbler85
Ich vermute mal du müsstest eher so etwas hier machen:


public static Operator opGleich {
get { return new Operator { value = "=", description = "gleich" } }
}


hi,



public static Operator opGleich = new Operator { value = "=", description = "gleich" };


macht genau das Gleiche.

Grüße Mirko
private Nachricht | Beiträge des Benutzers
Offensiv
myCSharp.de - Member



Dabei seit:
Beiträge: 3

Themenstarter:

beantworten | zitieren | melden

hi,
Zitat von Aratar
1. Finde ich deine Benennung suboptimal, value würde ich nicht als Namen verwenden, da er schon eine andere Bedeutung hat.
hab Value nur mal als Beispiel genommen, Warum sollte ich es aber sonst nicht nutzen ?
Zitat von Aratar
2. Was machst du überhaupt? Für was brauchst du so etwas? Ich kann mir keinen Fall vorstellen, für den so etwas sinnvoll ist.

Zur 2. Frage. Ich möchte Tippfehler vermeiden. Wenn ich erst die opGleich... usw.
definiere und sie dann dem Array zuweise, könnte ich vergessen einen Operator im Array Operators einzutragen.

Ich nehme das Array Operators um die Operatoren mit foreach durchlaufen zu können.
Könnte ich die Operatoren auch ohne array Operators durchlaufen ?


Grüße Mirko
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Offensiv am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Offensiv,

verwende statt des Arrays eine eigene Klasse, die IEnumerable<> implementiert. In dieser Klasse definierst du für jeden Operator eine Property, so wie das Grumbler85 vorgeschlagen hat. Den Enumerator der Klasse implementierst du (direkt oder indirekt) über Type.GetProperties/PropertyInfo.GetValue. Außerdem kannst du in der Klasse natürlich eine Indexer zur Verfügung stellen, damit weiterhin Zugriffe wie operators[0] möglich sind.

Value ist ein Kontextschlüsselwort, das seine Schlüsselwortbedeutung - wie der Name sagt nur - in einem bestimmtem Kontexten, also an bestimmten Stellen entfaltet. An anderen Stellen könnte man es als normalen Bezeichner verwenden. Davon würde ich aber - um Verwirrung zu vermeiden - ebenso wie Aratar dringend abraten. Ein Kontextschlüsselwort sollte man nur da einsetzen, wo es seine Schlüsselwortbedeutung hat.

herbivore
private Nachricht | Beiträge des Benutzers