Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++/CLI mit .NET ::  "for each" Index     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Culan
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.11.2009
Beiträge: 29
Beitrag Culan Mitglied 13:38:35 29.12.2009   Titel:   "for each" Index            Zitieren

Hallo,

mit der "for each" Schleife ist es möglich, ohne viel Aufwand ein array komplett zu durchlaufen und deren Werte zurück zu liefern.

Beispiel:

C++/CLI:
array<int> ^MeinArray = { 100, 200, 300, 400 };
String^ str;
for each( int i in MeinArray ) str += i.ToString() + " "


Das Problem war immer, das ich auch gerne den aktuellen Index zurück geliefert haben möchte, ohne eine extra Variable hierfür zu verwenden der immer um eins hoch zählt.
Zufällig bin ich auf die Variable "$I" gestoßen, die anscheinend standardmäßig als interner Zähler in "for each"-Schleifen verwendet wird.

Kennt jemand noch diese Variable und gibt es hierfür eine offizielle Beschreibung?

Grüße
Stefan
foodax
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.10.2006
Beiträge: 190
Beitrag foodax Mitglied 14:21:39 29.12.2009   Titel:              Zitieren

Hallo,

sehr interessant, mit $I kann man auch spielen :-)

C++/CLI:
    String ^str = "Hello World";   
    for each( char c in str)
    {
        Console::WriteLine(c);
        $I++;
    }


In der MSDN habe ich darüber auch nichts gefunden. Das "Feature" finde ich allerding sehr nützlich.

Gruß
foodax
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 14:24:59 29.12.2009   Titel:              Zitieren

Ich hab das auch noch nie gesehen... WO hast Du das her?
hab mal die Produktgruppe gefragt... die werden aber wohl im Urlaub sein ;)
Doku konnte ich auch nicht finden...

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 14:29:13 29.12.2009   Titel:              Zitieren

Interessanterweise macht der Compiler aber dann kein IEnumeralble daraus, sondern eine *normale* for-Schleife:

Hier der erzeugte C#-Code:
C#:
1
2
3
4
5
6
7
8
9
10
int main()
{
    int[] $S1 = null;
    $S1 = new int[] { 100, 200, 300, 400 };
    for (int $I = 0; $I < $S1.Length; $I++)
    {
        Console.WriteLine($S1[$I].ToString() + " " + $I);
    }
    return 0;
}


Lässt man hingegen das "$I" weg, so wird eine "normale" for-each Schleife erzeugt:

C#:
1
2
3
4
5
6
7
8
int main()
{
    foreach (int v in new int[] { 100, 200, 300, 400 })
    {
        Console.WriteLine(v.ToString() + " ");
    }
    return 0;
}

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)


Zuletzt bearbeitet von Jochen Kalmbach am 14:30:11 29.12.2009, insgesamt 1-mal bearbeitet
foodax
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.10.2006
Beiträge: 190
Beitrag foodax Mitglied 14:33:13 29.12.2009   Titel:              Zitieren

Jochen Kalmbach schrieb:
Ich hab das auch noch nie gesehen... WO hast Du das her?
hab mal die Produktgruppe gefragt... die werden aber wohl im Urlaub sein ;)
Doku konnte ich auch nicht finden...
Du kannst im "Lokal" Debugfenster schauen, da gibts noch mehr.

Gruß
foodax
Culan
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.11.2009
Beiträge: 29
Beitrag Culan Mitglied 15:07:14 29.12.2009   Titel:              Zitieren

Ganz genau foodax, genau von daher habe ich auch diese Variable!
Ich fragte mich natürlich woher die kommt!
Ich denke diese Variable ist als interner Hilszähler gedacht.
Eine Beschreibung von den msdn-Seiten habe ich leider auch keine gefunden!
Wenn ihr noch irgendwas ofizielles erfährt dann würde mich das intressieren!

Grüße
Stefan
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 12:54:49 30.12.2009   Titel:              Zitieren

Es ist ein Nebeneffekt des Compilers:

Siehe: The mystic variable “$I” during for each
http://blog.kalmbach-soft ....... riable-i-during-for-each/

Die Variable ist auch nur bei "arrays" vorhanden, nicht aber bei "echten" foreach loops...

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)
Probe-Nutzer
Unregistrierter




Beitrag Probe-Nutzer Unregistrierter 13:18:49 30.12.2009   Titel:              Zitieren

Hallo,

Jochen Kalmbach schrieb:
Es ist ein Nebeneffekt des Compilers:

Siehe: The mystic variable “$I” during for each
http://blog.kalmbach-soft ....... riable-i-during-for-each/

Die Variable ist auch nur bei "arrays" vorhanden, nicht aber bei "echten" foreach loops...


Sollte es in der Schlussfolgerung am Ende des Eintrags nicht besser heissen:

Zitat:
Do not rely on the compiler generated variable “$I”, and do not use “for each” if you need a index-variable, just use a normal for loop.


? Oder wolltest du etwas anderes ausdrücken?

MfG,

Probe-Nutzer
Jochen Kalmbach
Moderator

Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 12149
Beitrag Jochen Kalmbach Moderator 13:42:46 30.12.2009   Titel:              Zitieren

Dake für den Hinweis... da hat es vermutlich noch mehr Fehler drin ;)
Vor lauter Kinder um mich rum, hab ich nicht so viel Zeit es korrektur zu lesen...

_________________
Greetings
Jochen
(Microsoft MVP VC++) My blog about Win32 and .NET: http://blog.kalmbach-software.de/ (deutsch)


Zuletzt bearbeitet von Jochen Kalmbach am 13:43:10 30.12.2009, insgesamt 1-mal bearbeitet
C++ Forum :: C++/CLI mit .NET ::  "for each" Index   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.