Arrays in C# kopieren

Hallo,

ich habe probleme beim kopieren von Arrays.
Soweit ich weiß gibt es keine Globalen Variablen in C#.
Warum bekomme ich trotzdem diese Fehlermeldung:
Compilerfehlermeldung: CS0165: Verwendung der nicht zugewiesenen lokalen Variablen filelist

Das ist der Source:

");
String[] arr2 = coll.GetValues(arr1[loop1]);

switch (Server.HtmlEncode(arr1[loop1]))
{
case „target“:
string target=Server.HtmlEncode(arr2[0]);
break;
case „file“:
Array.Copy(arr2, filelist, arr2.Length);
break;
}
}

for (loop2 = 0; loop2 ");
}

Die Fehlermeldung kommt dann an folgender Stelle:
Zeile 23: Array.Copy(arr2, filelist, arr2.Length);

Ändere ich den Quellcode, so daß Filelist später deklariert wird:
string[] filelist;
Array.Copy(arr2, filelist, arr2.Length);

Erscheint die Fehlermeldung in der Zeile:
for (loop2 = 0; loop2

Hallo!
Ich muss gesetehen, ich bin etwas verwundert, weil ich mir nicht wirklich erklären kann, was man an der Meldung „Verwendung der nicht zugewiesenen lokalen Variablen filelist“ nicht verstehen kann.

  1. Du hast eine lokale Variable filelist deklariert. Stimmt.
  2. Du verwendest diese Variable (Array.Copy(arr2, filelist, arr2.Length):wink:. Stimmt auch.
  3. Dazwischen hast Du nichts mit der Variablen gemacht. Stimmt ebenfalls => Compilerfehler

Wenn Du ein Array deklarierst, hast Du noch nirgends gesagt, wie groß das Array sein soll.
Bspw. mit der Anweisung filelist = new stringarr1.Length; sagst Du dem Compiler, dass er das Array überhaupt erst (mit einer gegebenen Größe) anlegen soll.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke für den Hinweis.
Aber auch wenn ich Dein Source so ab ändere, bleibt der Fehler in der For Schleife.
Also ist eigentlich alles richtig, geht aber trotzdem nicht?

Hallo!
Ich muss gesetehen, ich bin etwas verwundert, weil ich mir
nicht wirklich erklären kann, was man an der Meldung
„Verwendung der nicht zugewiesenen lokalen Variablen filelist“
nicht verstehen kann.

  1. Du hast eine lokale Variable filelist deklariert. Stimmt.
  2. Du verwendest diese Variable (Array.Copy(arr2, filelist,
    arr2.Length):wink:. Stimmt auch.
  3. Dazwischen hast Du nichts mit der Variablen gemacht. Stimmt
    ebenfalls => Compilerfehler

Wenn Du ein Array deklarierst, hast Du noch nirgends gesagt,
wie groß das Array sein soll.
Bspw. mit der Anweisung filelist = new
stringarr1.Length;
sagst Du dem Compiler, dass er das
Array überhaupt erst (mit einer gegebenen Größe) anlegen soll.

Gruß,
Martin

Danke für den Hinweis.
Aber auch wenn ich Dein Source so ab ändere, bleibt der Fehler
in der For Schleife.
Also ist eigentlich alles richtig, geht aber trotzdem nicht?

Wenn Du nach wie vor einen Fehler bekommst, kann eben nicht „alles richtig“ sein.
Denk’ nochmal mit der Erklärung der Fehlermeldung nach, ob der Compiler nicht doch Recht hat und füge dann die Initialisierung des Arrays an passender Stelle ein.
Falls Du dann immer noch nicht weiter kommst, dann poste bitte nochmal den gesamten geänderten Code, dann können wir nochmal draufschauen.

Gruß,
Martin

Ok, Problem erkannt - fehlt nur noch die Lösung…
Lasse ich mir nach der For-Schleife die Varible target ausgeben, erhalte ich auch besagte Fehlermeldung.
Sprich die Variablen müssen wohl ausserhalb der Schleife deklariert werden, oder?
Wenn ich dann also zu Begin die Zeile
String target="";
einfüge, ist mit dieser Variable (target) schonmal alles ok.
Nur string[] filelist; bring nicht…

");
String[] arr2 = coll.GetValues(arr1[loop1]);

switch (Server.HtmlEncode(arr1[loop1]))
{
case „target“:
string target=Server.HtmlEncode(arr2[0]);
break;
case „file“:
filelist= new arr2[arr2.Length];
Array.Copy(arr2, filelist, arr2.Length);
break;
}
}

Response.Write(target); 'Funktioniert nun
for (loop2 = 0; loop2 ");
}

Danke,

Andre

Wenn Du nach wie vor einen Fehler bekommst, kann eben nicht
„alles richtig“ sein.
Denk’ nochmal mit der Erklärung der Fehlermeldung nach, ob der
Compiler nicht doch Recht hat und füge dann die
Initialisierung des Arrays an passender Stelle ein.
Falls Du dann immer noch nicht weiter kommst, dann poste bitte
nochmal den gesamten geänderten Code, dann können wir nochmal
draufschauen.

Gruß,
Martin

Hallo nochmal!

Dass Du in obigem Code jetzt immer noch die Meldung zur nicht initialisierten Variablen bekommst, liegt daran, dass Du filelist nur in einem Zweig Deiner switch-Anweisung zuweist.
Wenn immer nur „target“ kommt und niemals „file“, fällst Du unten aus der loop1-Schleife raus und filelist ist immer noch uninitialisiert.

Ansonsten: Gültigkeitsbereich von Variablen in dem Block, in dem sie deklariert sind, aber das ist ja eigentlich absolutes Grundlagenwissen…

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Alles ist gut, mit String[] filelist = new String[1] funktioniert es.
Dann in der Schleife den neuen Wert zuweisen und es geht.
Ich lerne ja gerade die Grundlagen …

Danke,

Andre

Hallo nochmal!

Dass Du in obigem Code jetzt immer noch die Meldung zur nicht
initialisierten Variablen bekommst, liegt daran, dass Du
filelist nur in einem Zweig Deiner switch-Anweisung zuweist.
Wenn immer nur „target“ kommt und niemals „file“, fällst Du
unten aus der loop1-Schleife raus und filelist ist immer noch
uninitialisiert.

Ansonsten: Gültigkeitsbereich von Variablen in dem Block, in
dem sie deklariert sind, aber das ist ja eigentlich absolutes
Grundlagenwissen…

Gruß,
Martin