Wie erhält man die Länge von Enum und Item in MQL4/MQL5? - Seite 3

 
Andrey Barinov:

Nein, die Verwendung eines Arrays anstelle einer Enum ist ein schlechter Entwurf.

Beispiel: Stellen Sie sich vor, Sie haben einen String-Wert. Und die Aufgabe besteht darin, herauszufinden, ob diese Zeichenkette einem der Enum-Elementnamen entspricht/enthält (EnumToString()).

Wie würden Sie dies lösen?

Können Sie eine reale Situation nennen, in der so etwas benötigt wird? Enum sind nur Konstanten, warum wollen Sie eine Zeichenkette innerhalb der Elemente identifizieren?
 
Alain Verleyen:
Können Sie eine reale Situation angeben, in der so etwas benötigt wird? Enum sind nur Konstanten, warum wollen Sie eine Zeichenfolge innerhalb der Elemente zu identifizieren?
 enum hedge
  {
   AUD=0,//Australian Dollar
   CAD=1,//Canadian Dollar
   CHF=2,//Swiss Franc
   JPY=3,//Japan Yen
   EUR=4,//European Euro
  };

Wenn Sie eine Absicherungsstruktur aufbauen wollen.

Aber dann vergleiche ich einfach alles, um den tatsächlichen Wert zu ermitteln.

sinput hedge C1=2;// Hedge Currency 

if(C1=="CAD")
 {
  //Do Something
 }
 
Alain Verleyen:
Können Sie eine reale Situation, wo so etwas benötigt wird? Enum sind nur Konstanten, warum wollen Sie eine Zeichenfolge innerhalb der Elemente zu identifizieren?
Meine Frage war nur ein Beispiel. Der Themenstarter hat ein anderes Beispiel beschrieben. Ich verstehe, dass sie nicht "real" genug für Sie sind und jeder kann Workarounds verwenden, aber das macht diese Aufgaben nicht nicht real für Menschen, die sie lösen.
 
Andrey Barinov:
Meine Frage war nur ein Beispiel. Der Themenstarter hat ein anderes beschrieben. Ich verstehe, dass sie für Sie nicht "real" genug sind und jeder Workarounds verwenden kann, aber das macht diese Aufgaben nicht unrealistisch für diejenigen, die sie lösen.
Und wir stecken hier immer noch fest... Eine Lösung kann nur für ein echtes Problem gefunden werden. Kennen Sie das wirkliche Problem des OPs? Ich kenne es nicht.
 
Ich auch nicht. Und ich habe ihn jetzt schon mehrmals gefragt.
 
Alain Verleyen:
Und wir stecken hier immer noch fest... Eine Lösung kann nur für ein wirkliches Problem gefunden werden. Kennen Sie das wirkliche Problem der OP? Ich kenne es nicht.

Ich kenne VIELE reale Situationen, in denen dies hilfreich wäre. Deshalb BENUTZE ich den Ansatz mit Arrays, weil es keinen anderen Weg gibt.

Beispiel: Sie haben eine Aufzählung/Liste von etwas (sagen wir GUI-Sprachoptionen für Ihr Programm), und Sie möchten dafür Optionsfelder erstellen, aus denen der Benutzer wählen kann. Sie WOLLEN den Code der Schaltflächen später NICHT ändern, wenn Sie die Anzahl der Elemente in Ihrer Aufzählung ändern.

Und Sie müssen den Enum-Wert aus dem Namen der Schaltfläche abrufen, um ihn auf Ihr Programm anzuwenden. Sie WOLLEN NICHT für JEDES Element in Ihrer Aufzählung Code schreiben, sondern Sie wollen eine einfache Lösung innerhalb eines Zyklus

Dies kann nicht nur auf Sprachen, sondern auch auf VIELE andere Dinge angewendet werden:

 
Es gibt viele Möglichkeiten, die gleichen Dinge zu tun.
 
Marco vd Heijden:
Es gibt viele Möglichkeiten, die gleichen Dinge zu tun.

Nun, ich kenne zumindest eine, denn ich benutze sie.

Und das macht die Funktion, über die wir sprechen, nicht nutzlos. Man kann einen Nagel mit einem Stein einschlagen, aber das bedeutet nicht, dass man es immer tun sollte.

 
Andrey Barinov:

Ich kenne VIELE reale Situationen, in denen dies hilfreich wäre. Deshalb BENUTZE ich den Ansatz mit Arrays, weil es keinen anderen Weg gibt.

1. Sie haben eine Aufzählung/Liste von etwas (sagen wir GUI-Sprachoptionen für Ihr Programm), und Sie möchten dafür Optionsfelder erstellen, aus denen der Benutzer wählen kann. Sie WOLLEN den Code der Schaltflächen später NICHT ändern, wenn Sie die Anzahl der Elemente in Ihrer Aufzählung ändern.

Und Sie müssen den Enum-Wert aus dem Namen der Schaltfläche abrufen, um Ihr Programm anzuwenden. Sie WOLLEN NICHT für JEDES Element in Ihrer Aufzählung Code schreiben, sondern Sie wollen eine einfache Lösung innerhalb eines Zyklus

Dies kann nicht nur auf Sprachen, sondern auch auf VIELE andere Dinge angewendet werden:

Ich weiß, Andrey. Ihr Beispiel braucht eine dynamische Lösung, also verwenden Sie nicht enum, sondern array. Wenn Sie enum (statisch) für etwas verwenden wollen, das dynamisch ist (Ihr Beispiel), ist das ein schlechtes Design. Es scheint mir, dass wir dasselbe sagen.

Wir können dem OP nicht weiterhelfen, da er nicht sagt, warum er eigentlich eine Schleife braucht.

 
Andrey Barinov:

Nun, ich kenne zumindest eine, denn ich benutze sie.

Und das macht die Funktion, über die wir sprechen, nicht nutzlos. Man kann einen Nagel mit einem Stein einschlagen, aber das bedeutet nicht, dass man es immer tun sollte.

Sogar Java hatte lange Zeit keinen Enum-Typ, und da Java selten reine Arrays verwendet, gab es viele andere OO-Wege, um eine Liste von Werten zu iterieren. Ich würde es nicht als einen Stein und einen Nagel bezeichnen.