Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Instrukcja using zapewnia prawidłowe użycie IDisposable wystąpienia:
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);
}
}
}
Gdy kontrolka opuszcza blok instrukcji using , pozyskane IDisposable wystąpienie zostanie usunięte. W szczególności instrukcja gwarantuje, using że wystąpienie jednorazowe zostanie usunięte, nawet jeśli wystąpi wyjątek w bloku instrukcji using . W poprzednim przykładzie otwarty plik jest zamykany po przetworzeniu wszystkich wierszy.
Użyj instrukcji , await using aby poprawnie użyć IAsyncDisposable wystąpienia:
await using (var resource = new AsyncDisposableExample())
{
// Use the resource
}
Aby uzyskać więcej informacji na temat korzystania z IAsyncDisposable wystąpień, zobacz sekcję Using async unieszkodliwiania w artykule Implement a DisposeAsync method (Implementowanie metody DisposeAsync ).
Można również użyć usingdeklaracji , która nie wymaga nawiasów klamrowych:
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;
}
Po zadeklarowaniu using w deklaracji zmienna lokalna jest usuwana na końcu zakresu, w którym jest zadeklarowana. W poprzednim przykładzie usuwanie odbywa się na końcu metody.
Dokumentacja języka C# zawiera ostatnio wydaną wersję języka C#. Zawiera również początkową dokumentację funkcji w publicznej wersji zapoznawczej nadchodzącej wersji językowej.
Dokumentacja identyfikuje dowolną funkcję po raz pierwszy wprowadzoną w ostatnich trzech wersjach języka lub w bieżącej publicznej wersji zapoznawczej.
Wskazówka
Aby dowiedzieć się, kiedy funkcja została po raz pierwszy wprowadzona w języku C#, zapoznaj się z artykułem dotyczącym historii wersji języka C#.
Zmienna zadeklarowana przez instrukcję lub deklarację using jest tylko do odczytu. Nie można go ponownie przypisać ani przekazać go jako parametru ref lub out .
Można zadeklarować kilka wystąpień tego samego typu w jednej using instrukcji, jak pokazano w poniższym przykładzie:
using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
// Process both files
}
Po zadeklarowaniu kilku wystąpień w jednej using instrukcji są one usuwane w odwrotnej kolejności deklaracji.
Można również użyć instrukcji using i deklaracji z wystąpieniem struktury ref, która pasuje do wzorca jednorazowego. Oznacza to, że ma metodę wystąpienia Dispose , która jest dostępna, bez parametrów i ma typ zwracany void .
using Wewnątrz return bloku nadal gwarantuje usunięcie. Kompilator ponownie zapisuje go w obiekcie try/finally, więc zasób jest zawsze wywoływany Dispose , zanim metoda rzeczywiście zwróci wartość .
Instrukcja using może być również następująca:
using (expression)
{
// ...
}
w przypadku wystąpienia expression jednorazowego. W poniższym przykładzie pokazano ten formularz:
StreamReader reader = File.OpenText(filePath);
using (reader)
{
// Process file content
}
Ostrzeżenie
W poprzednim przykładzie po opuszczeniu instrukcji kontrolka using wystąpienie jednorazowe pozostaje w zakresie, gdy jest już usuwane. Jeśli używasz tego wystąpienia dalej, może wystąpić wyjątek, na przykład ObjectDisposedException. Dlatego należy zadeklarować zmienną jednorazową w instrukcji using lub z deklaracją using .
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję using statementspecyfikacji języka C#.