Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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 using
tas en förvärvad IDisposable instans 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 using
deklaration 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.
En variabel som deklareras av -instruktionen eller deklarationen using
är skrivskyddad. Du kan inte omtilldela den eller skicka den som en ref
eller out
flera parametrar.
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.
-instruktionen using
kan också vara av följande formulär:
using (expression)
{
// ...
}
där expression
skapar en disponibel instans. Följande exempel visar att:
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 rekommenderar vi att du deklarerar en engångsvariabel 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# och förslagsanteckningen om "mönsterbaserad användning" och "använda deklarationer".