menggunakan pernyataan - pastikan penggunaan objek sekali pakai yang benar

Pernyataan ini using memastikan penggunaan instans yang IDisposable benar:

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);
        }
    }
}

Ketika kontrol meninggalkan blok using pernyataan, instans yang diperoleh IDisposable akan dibuang. Secara khusus, using pernyataan memastikan bahwa instans sekali pakai dibuang bahkan jika pengecualian terjadi dalam blok using pernyataan. Dalam contoh sebelumnya, file yang dibuka ditutup setelah semua baris diproses.

await using Gunakan pernyataan untuk menggunakan IAsyncDisposable instans dengan benar:

await using (var resource = new AsyncDisposableExample())
{
    // Use the resource
}

Untuk informasi selengkapnya tentang penggunaan IAsyncDisposable instans, lihat bagian Menggunakan asinkron sekali pakai dari artikel Menerapkan metode DisposeAsync.

Anda juga dapat menggunakan usingdeklarasi yang tidak memerlukan kurung kurawal:

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;
}

Ketika dinyatakan dalam using deklarasi, variabel lokal dibuang di akhir cakupan tempat variabel dinyatakan. Dalam contoh sebelumnya, pembuangan terjadi di akhir metode.

Variabel yang dideklarasikan oleh using pernyataan atau deklarasi dibacakan secara baca-saja. Anda tidak dapat menetapkan ulang atau meneruskannya sebagai ref parameter atau out .

Anda dapat mendeklarasikan beberapa instans dengan jenis yang sama dalam satu using pernyataan, seperti yang ditunjukkan contoh berikut:

using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
    // Process both files
}

Ketika Anda mendeklarasikan beberapa instans dalam satu using pernyataan, instans tersebut dibuang dalam urutan deklarasi terbalik.

Anda juga dapat menggunakan using pernyataan dan deklarasi dengan instans struktur ref yang sesuai dengan pola sekali pakai. Artinya, ia memiliki metode instans Dispose , yang dapat diakses, tanpa parameter dan memiliki void jenis pengembalian.

Pernyataan juga using dapat berupa formulir berikut:

using (expression)
{
    // ...
}

di mana expression menghasilkan instans sekali pakai. Contoh berikut menunjukkan hal tersebut:

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Peringatan

Dalam contoh sebelumnya, setelah kontrol meninggalkan pernyataan, instans using sekali pakai tetap berada dalam cakupan saat sudah dibuang. Jika Anda menggunakan instans tersebut lebih lanjut, Anda mungkin mengalami pengecualian, misalnya, ObjectDisposedException. Itulah sebabnya kami merekomendasikan untuk mendeklarasikan variabel sekali pakai dalam using pernyataan atau dengan using deklarasi.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian menggunakan pernyataan dari spesifikasi bahasa C# dan catatan proposal tentang "penggunaan berbasis pola" dan "menggunakan deklarasi".

Lihat juga