Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Instruktionen using säkerställer korrekt användning av en IDisposable instans:
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);
}
}
}
När kontrollen lämnar -blocket för -instruktionen tas den förvärvade IDisposable instansen using bort. I synnerhet säkerställer instruktionen using att en disponibel instans tas bort även om ett undantag inträffar inom -blocket i -instruktionen using . I föregående exempel stängs en öppnad fil när alla rader har bearbetats.
Använd -instruktionen await using för att använda en IAsyncDisposable instans på rätt sätt:
await using (var resource = new AsyncDisposableExample())
{
// Use the resource
}
Mer information om hur du använder IAsyncDisposable instanser finns i avsnittet Använda asynkron disponibel i artikeln Implementera en DisposeAsync-metod .
Du kan också använda en usingdeklaration som inte kräver klammerparenteser:
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;
}
När den deklareras i en using deklaration tas en lokal variabel bort i slutet av omfånget där den deklareras. I föregående exempel sker avyttring i slutet av en metod.
C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.
Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.
Tips/Råd
Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.
En variabel som deklareras av -instruktionen eller deklarationen using är skrivskyddad. Du kan inte omtilldela den eller skicka den som en ref eller out parameter.
Du kan deklarera flera instanser av samma typ i en using -instruktion, som följande exempel visar:
using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
// Process both files
}
När du deklarerar flera instanser i en using instruktion tas de bort i omvänd deklarationsordning.
Du kan också använda -instruktionen och deklarationen using med en instans av en referens-struct som passar engångsmönstret. Den har alltså en instansmetod Dispose som är tillgänglig, parameterlös och har en void returtyp.
En return inuti ett using block garanterar fortfarande bortskaffande. Kompilatorn skriver om den till en try/finally, så resursens anropas Dispose alltid innan metoden faktiskt returneras.
-instruktionen using kan också vara av följande formulär:
using (expression)
{
// ...
}
där expression skapar en disponibel instans. I följande exempel visas formuläret:
StreamReader reader = File.OpenText(filePath);
using (reader)
{
// Process file content
}
Varning
I föregående exempel, när kontrollen lämnar -instruktionen using , förblir en disponibel instans i omfånget medan den redan har tagits bort. Om du använder den instansen ytterligare kan du stöta på ett undantag, ObjectDisposedExceptiontill exempel . Därför bör du deklarera en disponibel variabel i -instruktionen using eller med deklarationen using .
Språkspecifikation för C#
Mer information finns i avsnittet Using statement (Använda instruktion ) i språkspecifikationen C#.