Ich bin bei dieser Suche:
numbers[item] = 2;
In diesem Ausdruck sind Sie die item
Variable wie ein Index verwenden, als ob es hatte die Werte 1
, 2
, 3
, 4
usw. Das ist nicht wie die foreach i Laufzeitvariable funktioniert für C#. Die einzige Sprache, die ich kenne, ist Javascript.
Denken Sie daran, dass foreach
und for
nicht dasselbe sind. So gut wie jede andere Sprache, einschließlich C#, gibt Ihnen die tatsächlichen Array-Werte in der item
Größe eines foreach
Schleife: 1
, 4
, 3
, 5
etc. Nun sind diese ganzen Zahlen, so dass Sie könnte versuchen, sie als Indizes zu verwenden, . Sie können die Schleife so lange ausführen ... bis Sie den Wert 7
erreichen. Zu diesem Zeitpunkt hat Ihr Array nur sechs Werte. Sie versuchen, dies zu tun:
numbers[7] = 2;
für ein Array, in dem der größte gültigen Index Sie 5
ist verwenden können.
Dies gilt auch, wenn Sie Ihre Modifizierung des Arrays berücksichtigen. Lassen Sie sich nach jeder Iteration durch die Schleife am Array aussehen:
{ 1, 4, 3, 5, 7, 9 } //initial state
{ 1, 2, 3, 5, 7, 9 } // after 1st iteration (index 0). Value at index 0 is 1, so item as index 1 is set to 2
{ 1, 2, 2, 5, 7, 9 } // after 2nd iteration (index 1). Value at index 1 is now 2, so item at index 2 is set to 2
{ 1, 2, 2, 5, 7, 9 } // after 3rd iteration (index 2). Value at index 2 is now 2, so item at index 2 is set to 2
{ 1, 2, 2, 5, 7, 2 } // after 4th iteration (index 3). Value at index 3 is 5, so item at index 5 is set to 2
// The 5th iteration (index 4). Value at index 4 is 7, which is beyond the end of the array
Für die warum diese ... es klingt wie Sie zu einer dynamischeren Sprache gewohnt sind. Einige dieser anderen Sprachen, wie PHP oder Javascript, haben keine echten Arrays überhaupt im reinen Informatik-Sinn. Stattdessen haben sie Sammlung Typen, die sie Anruf ein Array, aber wenn Sie sich darauf konzentrieren, sind wirklich etwas anderes.
C# hat echte Arrays, und echte Arrays haben eine feste Größe. Wenn das, was Sie wirklich wollen, eine Sammlung ist, hat C# Sammlungen auch. Sie können beispielsweise List<T>
Objekte verwenden, um eine Array-ähnliche Sammlung zu erhalten, an die Sie leicht anhängen können.
Für die anderen Sprachen variieren die Ergebnisse je nachdem, was Sie sprechen, aber für die meisten permissive das Ergebnis Ihrer fünften Iteration ist so etwas wie folgt aus:
{ 1, 2, 2, 5, 7, 2, ,2 }
Notieren Sie sich den fehlenden Wert bei Index 6. Diese Art von Dingen führt zu Fehlern, die durch Ihre Tests schlüpfen und erst zur Laufzeit auftauchen. Sie müssen sich auch fragen, wie dicht oder spärlich das Array gefüllt wird, da die beste Strategie für die Handhabung dieser Arrays je nach Ihrer Antwort sehr unterschiedlich sein kann ... alles nur von einem großen Backing-Array mit leeren Knoten, die der Programmierer hat kenne den ganzen Weg zu Hashtables und Dictionaries. Und übrigens, C# hat diese Optionen wieder für Sie verfügbar.
Was genau erwarten Sie von diesem Vorgang? Es wird fehlschlagen, weil Sie versuchen, auf Index 7 und 9 eines Arrays zuzugreifen, das nur 6 lang ist. * Array-Größen sind in C# festgelegt. * – DavidG
Sie können keine Elemente zu einem Array hinzufügen, unabhängig vom verwendeten Loop-Typ. –
@ SelmanGenç natürlich kann ich ... 'int [] Zahlen = {1, 4, 3, 5, 7, 9}; für (int i = 0; i
john