| Autor |
Nachricht |
Culan
Mitglied
Benutzerprofil
Anmeldungsdatum: 30.11.2009
Beiträge: 28
|
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: 179
|
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: 11307
|
Jochen Kalmbach Moderator
13:24:59 29.12.2009 Titel: |
|
Zitieren |
|
 |
Jochen Kalmbach
Moderator
Benutzerprofil
Anmeldungsdatum: 11.11.2005
Beiträge: 11307
|
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: 179
|
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
|
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: 11307
|
Jochen Kalmbach Moderator
11:54:49 30.12.2009 Titel: |
|
Zitieren |
|
 |
Probe-Nutzer
Unregistrierter
|
Probe-Nutzer Unregistrierter
12:18:49 30.12.2009 Titel: |
|
Zitieren |
Hallo,
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: 11307
|
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 |
|
 |