Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Advanced Developers Conference     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/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: 28
Beitrag Culan Mitglied 12: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() + " "
C++/CLI:
array<int> ^MeinArray = { 100, 200, 300, 400 };
String^ str;
for each( int i in MeinArray ) str += i.ToString() + " "
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: 180
Beitrag foodax Mitglied 13: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++;
    }
C++/CLI:
String ^str = "Hello World";
for each( char c in str)
{
Console::WriteLine(c);
$I++;
}
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: 11312
Beitrag Jochen Kalmbach Moderator 13: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: 11312
Beitrag Jochen Kalmbach Moderator 13: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# Code:
1
2
3
4
5
6
7
8
9
10
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;
}
C# Code:
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;
}
C# Code:
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# Code:
1
2
3
4
5
6
7
8
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;
}
C# Code:
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;
}
C# Code:
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 13:30:11 29.12.2009, insgesamt 1-mal bearbeitet
foodax
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.10.2006
Beiträge: 180
Beitrag foodax Mitglied 13: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: 28
Beitrag Culan Mitglied 14: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: 11312
Beitrag Jochen Kalmbach Moderator 11:54:49 30.12.2009   Titel:              Zitieren

Es ist ein Nebeneffekt des Compilers:

Siehe: The mystic variable “$I” during for each
http://blog.kalmbach-software.de/2009/12/30/the-mystic-variable-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 12: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-software.de/2009/12/30/the-mystic-variable-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: 11312
Beitrag Jochen Kalmbach Moderator 12: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 12:43:10 30.12.2009, insgesamt 1-mal bearbeitet
C/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++.de 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, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de 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.