Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die using-Anweisung stellt die ordnungsgemäße Verwendung einer IDisposable-Instanz sicher:
var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
}
Wenn das Steuerelement den Block der using Anweisung verlässt, wird die erworbene IDisposable Instanz verworfen. Insbesondere stellt die using-Anweisung sicher, dass eine verwerfbare Instanz gelöscht wird, auch wenn eine Ausnahme innerhalb des Blocks der using-Anweisung auftritt. Im vorherigen Beispiel wird eine geöffnete Datei geschlossen, nachdem alle Zeilen verarbeitet wurden.
Verwenden Sie die await using-Anweisung, um eine IAsyncDisposable-Instanz ordnungsgemäß zu verwenden:
await using (var resource = new AsyncDisposableExample())
{
// Use the resource
}
Weitere Informationen zur Verwendung von IAsyncDisposable Instanzen finden Sie im Abschnitt "Using async disposable " des Artikels "Implement a DisposeAsync method" .
Sie können auch eine using-Deklaration verwenden, die keine geschweiften Klammern erfordert:
static IEnumerable<int> LoadNumbers(string filePath)
{
using StreamReader reader = File.OpenText(filePath);
var numbers = new List<int>();
string line;
while ((line = reader.ReadLine()) is not null)
{
if (int.TryParse(line, out int number))
{
numbers.Add(number);
}
}
return numbers;
}
Bei der Deklaration in einer using-Deklaration wird eine lokale Variable am Ende des Bereichs verworfen, in dem sie deklariert wurde. Im vorherigen Beispiel erfolgt das Verwerfen am Ende einer Methode.
Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie erste Dokumentation für Features in der öffentlichen Vorschau für die kommende Sprachversion.
In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.
Tipp
Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.
Eine Variable, die von der using-Anweisung oder -Deklaration deklariert wird, ist schreibgeschützt. Sie können sie nicht neu zuweisen oder als refout Parameter übergeben.
Sie können mehrere Instanzen desselben Typs in einer using-Anweisung deklarieren, wie das folgende Beispiel zeigt:
using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
// Process both files
}
Wenn Sie mehrere Instanzen in einer using-Anweisung deklarieren, werden sie in umgekehrter Reihenfolge der Deklaration verworfen.
Sie können auch die using-Anweisung und -Deklaration mit einer ref struct-Instanz (Verweisstruktur) verwenden, die dem verwerfbaren Muster entspricht. Das heißt, es verfügt über eine Instanzmethode Dispose , die barrierefrei, parameterlos ist und einen void Rückgabetyp aufweist.
Ein return innerer using Block garantiert weiterhin die Entsorgung. Der Compiler schreibt ihn in ein try/finally, sodass die Ressource Dispose immer aufgerufen wird, bevor die Methode tatsächlich zurückgegeben wird.
Die using-Anweisung kann auch folgende Form aufweisen:
using (expression)
{
// ...
}
Dabei erzeugt expression eine verwerfbare Instanz. Im folgenden Beispiel wird dieses Formular veranschaulicht:
StreamReader reader = File.OpenText(filePath);
using (reader)
{
// Process file content
}
Warnung
Nachdem das Steuerelement im vorherigen Beispiel die using-Anweisung verlassen hat, verbleibt eine verwerfbare Instanz im Bereich, während sie bereits verworfen ist. Wenn Sie diese Instanz weiter verwenden, tritt möglicherweise eine Ausnahme auf, z. B. ObjectDisposedException. Aus diesem Grund sollten Sie eine einwegvariable Variable innerhalb der using Anweisung oder mit der using Deklaration deklarieren.
C#-Sprachspezifikation
Weitere Informationen finden Sie im Abschnitt " Using-Anweisung " der C#-Sprachspezifikation.