Übung: Erkunden der Funktionen „Clear()“ und „Resize()“
- 15 Minuten
Während Sie an der Entwicklung eines Paletten-Trackers für das Logistikunternehmen arbeiten, ist es wahrscheinlich, dass Sie neue Paletten verfolgen und alte aus dem Tracking-System entfernen müssen. Wie können Sie also eine Tracking-Funktionalität erstellen, die das Hinzufügen und Entfernen von Paletten ermöglicht?
Verwenden von Arraymethoden zum Löschen und Ändern der Größe von Arrays
Mit der Array.Clear()-Methode können Sie den Inhalt bestimmter Elemente in Ihrem Array eliminieren und durch den Standardwert des Arrays ersetzen. Wenn Sie beispielsweise ein Element in einem string-Array löschen, wird der gelöschte Wert durch null ersetzt. Wenn Sie ein Element in einem int-Array löschen, ist der Ersatz 0 (Null).
Mit der Array.Resize()-Methode können Sie dagegen Elemente aus Ihrem Array hinzufügen oder entfernen.
Verwenden Sie den Operator für Zeilenkommentare
//, um den gesamten Code aus den vorherigen Übungen auszukommentieren bzw. löschen Sie diesen.Aktualisieren Sie Ihren Code im Visual Studio Code-Editor wie folgt:
string[] pallets = [ "B14", "A11", "B12", "A13" ]; Console.WriteLine(""); Array.Clear(pallets, 0, 2); Console.WriteLine($"Clearing 2 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); }Hinweis
In diesem Beispiel wird die Auflistungsausdruckssyntax verwendet, die in C# 12 eingeführt und in .NET 10 unterstützt wird.
Nehmen Sie sich eine Minute Zeit, um sich mit der Codezeile
Array.Clear(pallets, 0, 2);zu befassen.Hier verwenden Sie die
Array.Clear()-Methode, um die Werte zu löschen, die in den Elementen despallets-Arrays gespeichert sind. Sie beginnen bei Index0und löschen2Elemente.Wählen Sie im Menü "Visual Studio Code-Datei " die Option "Speichern" aus.
Die Datei „Program.cs“ muss vor dem Erstellen oder Ausführen des Codes gespeichert werden.
Klicken Sie im EXPLORER-Bereich auf "TestProject", um ein Terminal am Speicherort des TestProject-Ordners zu öffnen, klicken Sie mit der rechten Maustaste auf "TestProject", und wählen Sie dann "In integriertem Terminal öffnen" aus.
Es sollte sich ein Terminalbereich mit einer Eingabeaufforderung öffnen, die anzeigt, dass das Terminal für den Speicherort Ihres TestProject-Ordners geöffnet ist.
Um Ihren Code auszuführen, geben Sie an der Terminal-Eingabeaufforderung dotnet run ein und drücken Sie dann die Eingabetaste.
Hinweis
Wenn die Meldung „Es wurde kein ausführbares Projekt gefunden“ angezeigt wird, stellen Sie sicher, dass in der Eingabeaufforderung des Terminals der erwartete Speicherort des Ordners „TestProject“ angezeigt wird. Beispiel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Beim Ausführen des Codes werden Sie feststellen, dass die in den ersten beiden Elementen des Arrays gespeicherten Werte gelöscht werden. In der
Length-Eigenschaft und in derforeach-Anweisung sind die Elemente zwar weiterhin vorhanden, aber sie sind jetzt leer.Clearing 2 ... count: 4 -- -- -- B12 -- A13
Leere Zeichenfolge im Vergleich zu NULL
Wenn Sie Array.Clear() verwenden, verweisen die gelöschten Elemente nicht mehr auf eine Zeichenfolge im Arbeitsspeicher. Tatsächlich verweist das Element auf überhaupt nichts. Auf nichts zu verweisen, ist ein wichtiges Konzept, das anfangs schwer zu begreifen sein kann.
Was geschieht, wenn Sie versuchen, den Wert eines Elements abzurufen, das von der Array.Clear()-Methode verarbeitet wurde?
Zugreifen auf den Wert eines gelöschten Elements
Zwei Ansätze sind erforderlich, um den Wert eines gelöschten Elements zu bestimmen, damit Sie sehen, wie der C#-Compiler mit einem Nullwert umgeht.
Fügen Sie neue Codezeilen um die Codezeile
Array.Clear(pallets, 0, 2);wie folgt ein:Console.WriteLine($"Before: {pallets[0]}"); Array.Clear(pallets, 0, 2); Console.WriteLine($"After: {pallets[0]}");Überprüfen Sie, ob Ihr Code mit der folgenden Codeauflistung übereinstimmt:
string[] pallets = [ "B14", "A11", "B12", "A13" ]; Console.WriteLine(""); Console.WriteLine($"Before: {pallets[0]}"); Array.Clear(pallets, 0, 2); Console.WriteLine($"After: {pallets[0]}"); Console.WriteLine($"Clearing 2 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); }Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus.
Die folgende Ausgabe wird angezeigt.
Before: B14 After: Clearing 2 ... count: 4 -- -- -- B12 -- A13
Wenn Sie sich die Ausgabezeile After: ansehen, sind Sie möglicherweise der Ansicht, dass der in pallets[0] gespeicherte Wert eine leere Zeichenfolge ist. Der C#-Compiler konvertiert den NULL-Wert jedoch zu Darstellungszwecken implizit in eine leere Zeichenfolge.
Aufrufen einer Zeichenfolgen-Hilfsmethode für ein gelöschtes Element
Um nachzuweisen, dass der in pallets[0] gespeicherte Wert NULL ist, ändern Sie das Codebeispiel, um die ToLower()-Methode für pallets[0] aufzurufen. Wenn es sich um eine Zeichenfolge handelt, sollte dies problemlos funktionieren. Wenn die Ausgabe jedoch NULL ist, sollte der Code eine Ausnahme auslösen.
Um die
ToLower()-Methode jedes Mal aufzurufen, wenn Sie versuchen,pallets[0]in die Konsole zu schreiben, aktualisieren Sie Ihren Code wie folgt:Console.WriteLine($"Before: {pallets[0].ToLower()}"); Array.Clear(pallets, 0, 2); Console.WriteLine($"After: {pallets[0].ToLower()}");Stellen Sie sicher, dass Ihr Code dem folgenden Codebeispiel entspricht:
string[] pallets = [ "B14", "A11", "B12", "A13" ]; Console.WriteLine(""); Console.WriteLine($"Before: {pallets[0].ToLower()}"); Array.Clear(pallets, 0, 2); Console.WriteLine($"After: {pallets[0].ToLower()}"); Console.WriteLine($"Clearing 2 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); }Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus. Wenn Sie den Code ausführen, wird dieses Mal eine umfangreiche Fehlermeldung angezeigt. Wenn Sie den Text analysieren, wird die folgende Meldung angezeigt:
System.NullReferenceException: Object reference not set to an instance of an object.Diese Ausnahme wird ausgelöst, weil die Methode für den Inhalt des
pallets[0]-Elements aufgerufen wird, bevor der C#-Compiler NULL implizit in eine leere Zeichenfolge konvertieren kann.Dies führt am Ende dazu, dass
Array.Clear()den Verweis eines Arrayelements auf einen Wert (sofern vorhanden) entfernt. Um dieses Problem zu beheben, können Sie vor dem Versuch, den Wert zu drucken, nach NULL suchen.Um diesen Fehler zu vermeiden, fügen Sie eine
if-Anweisung hinzu, bevor wir auf ein Arrayelement zugreifen, das NULL sein könnte.
if (pallets[0] != null)
Console.WriteLine($"After: {pallets[0].ToLower()}");
Ändern der Größe des Arrays zum Hinzufügen weiterer Elemente
Bearbeiten Sie als Nächstes das Codebeispiel aus Schritt 1, um Code zum Ändern der Arraygröße hinzuzufügen. Der Code sollte nun mit dem folgenden Codebeispiel übereinstimmen:
string[] pallets = ["B14", "A11", "B12", "A13" ]; Console.WriteLine(""); Array.Clear(pallets, 0, 2); Console.WriteLine($"Clearing 2 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); } Console.WriteLine(""); Array.Resize(ref pallets, 6); Console.WriteLine($"Resizing 6 ... count: {pallets.Length}"); pallets[4] = "C01"; pallets[5] = "C02"; foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); }Nehmen Sie sich ein paar Minuten Zeit, um sich mit der Zeile
Array.Resize(ref pallets, 6);zu befassen.Hier rufen Sie die
Resize()-Methode auf, indem Sie daspallets-Array mithilfe desref-Schlüsselworts als Verweis übergeben. In einigen Fällen ist es für Methoden erforderlich, Argumente nach Wert (Standard) oder nach Verweis (mit dem Schlüsselwort „ref“) zu übergeben. Um die Gründe zu erläutern, müssten wir hier sehr weit ausholen und das Thema Objektverwaltung in .NET erläutern. Dies geht jedoch über den Rahmen dieses Modus hinaus. Im Zweifelsfall empfiehlt es sich, sich in der IntelliSense- oder Microsoft-Dokumentation zu informieren. Dort finden Sie Beispiele dazu, wie bestimmte Methoden ordnungsgemäß aufgerufen werden.In diesem Fall wird die Größe des
pallets-Arrays von vier Elementen in6geändert. Die neuen Elemente werden nach den aktuellen Elementen hinzugefügt. Die beiden neuen Elemente sind NULL, bis Sie ihnen einen Wert zuweisen.Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus. Wenn Sie den Code ausführen, sollte die folgende Ausgabe angezeigt werden.
Clearing 2 ... count: 4 -- -- -- B12 -- A13 Resizing 6 ... count: 6 -- -- -- B12 -- A13 -- C01 -- C02
Ändern der Größe des Arrays zum Entfernen von Elementen
Umgekehrt können Sie Arrayelemente mithilfe von Array.Resize() entfernen.
Aktualisieren Sie Ihren Code im Visual Studio Code-Editor wie folgt:
string[] pallets = [ "B14", "A11", "B12", "A13" ]; Console.WriteLine(""); Array.Clear(pallets, 0, 2); Console.WriteLine($"Clearing 2 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); } Console.WriteLine(""); Array.Resize(ref pallets, 6); Console.WriteLine($"Resizing 6 ... count: {pallets.Length}"); pallets[4] = "C01"; pallets[5] = "C02"; foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); } Console.WriteLine(""); Array.Resize(ref pallets, 3); Console.WriteLine($"Resizing 3 ... count: {pallets.Length}"); foreach (var pallet in pallets) { Console.WriteLine($"-- {pallet}"); }Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus. Wenn Sie den Code ausführen, sollte die folgende Ausgabe angezeigt werden:
Clearing 2 ... count: 4 -- -- -- B12 -- A13 Resizing 6 ... count: 6 -- -- -- B12 -- A13 -- C01 -- C02 Resizing 3 ... count: 3 -- -- -- B12Beachten Sie, dass die ersten beiden NULL-Elemente durch das Aufrufen von
Array.Resize()nicht eliminiert wurden. Stattdessen wurden die letzten drei Elemente entfernt. Vor allem die letzten drei Elemente wurden entfernt, obwohl sie Zeichenfolgen enthielten.
Können NULL-Elemente aus einem Array entfernt werden?
Wenn durch die Array.Resize()-Methode keine leeren Elemente aus einem Array entfernt werden, gibt es dann eine andere Hilfsmethode, die dies automatisch erledigt? Nein Der beste Weg, Elemente aus einem Array zu löschen, besteht darin, die Anzahl der Elemente ungleich NULL zu zählen, indem Sie die einzelnen Elemente durchlaufen und eine Variable (einen Zähler) erhöhen. Als Nächstes erstellen Sie ein zweites Array, das die Größe der Zählervariablen enthält. Zum Schluss durchlaufen Sie die einzelnen Elemente im ursprünglichen Array und kopieren Werte ungleich NULL in das neue Array.
Zusammenfassung
Im Folgenden finden Sie einige wichtige Themen, die in dieser Kurseinheit behandelt wurden:
- Verwenden Sie die
Clear()-Methode, um die Werte aus den Elementen im Array zu entfernen. - Verwenden Sie die
Resize()-Methode, um die Anzahl der Elemente im Array zu ändern. Am Ende des Arrays können Sie Elemente hinzufügen oder entfernen. - Neue Arrayelemente und gelöschte Elemente sind NULL. Das bedeutet, dass sie nicht auf einen Wert im Arbeitsspeicher verweisen.
Überprüfen Sie Ihr Wissen
Feedback
War diese Seite hilfreich?
No
Benötigen Sie Hilfe zu diesem Thema?
Möchten Sie versuchen, Ask Learn zu verwenden, um Sie durch dieses Thema zu klären oder zu leiten?