Laden...

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

Erstellt von Offensiv vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.022 Views
O
Offensiv Themenstarter:in
3 Beiträge seit 2011
vor 13 Jahren
Objekte über Properties und als Array zur Verfügung stellen

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;
        }
    }
}

G
538 Beiträge seit 2008
vor 13 Jahren

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)

A
118 Beiträge seit 2009
vor 13 Jahren

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

O
Offensiv Themenstarter:in
3 Beiträge seit 2011
vor 13 Jahren

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

O
Offensiv Themenstarter:in
3 Beiträge seit 2011
vor 13 Jahren

hi,

  1. Finde ich deine Benennung suboptimal, :::

hab Value nur mal als Beispiel genommen, Warum sollte ich es aber sonst nicht nutzen ?

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

49.485 Beiträge seit 2005
vor 13 Jahren

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