Bagikan melalui


ketika (referensi C#)

when Gunakan kata kunci kontekstual untuk menentukan kondisi filter dalam konteks berikut:

Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.

Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.

Petunjuk / Saran

Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.

when dalam klausul tangkapan

when Gunakan kata kunci dalam klausul tangkapan untuk menentukan kondisi yang harus benar bagi handler untuk pengecualian tertentu untuk dijalankan. Sintaksnya adalah:

catch (ExceptionType [e]) when (expr)

di mana expr adalah ekspresi yang mengevaluasi ke nilai Boolean. Jika mengembalikan true, handler pengecualian dijalankan; jika false, tidak.

Filter pengecualian dengan when kata kunci memberikan beberapa keuntungan daripada pendekatan penanganan pengecualian tradisional, termasuk dukungan debugging dan manfaat performa yang lebih baik. Untuk penjelasan terperinci tentang bagaimana filter pengecualian mempertahankan tumpukan panggilan dan meningkatkan penelusuran kesalahan, lihat Filter pengecualian vs. penanganan pengecualian tradisional.

Contoh berikut menggunakan when kata kunci untuk menjalankan handler secara kondisional tergantung HttpRequestException pada teks pesan pengecualian.

using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        Console.WriteLine(MakeRequest().Result);
    }

    public static async Task<string> MakeRequest()
    {
        var client = new HttpClient();
        var streamTask = client.GetStringAsync("https://localHost:10000");
        try
        {
            var responseText = await streamTask;
            return responseText;
        }
        catch (HttpRequestException e) when (e.Message.Contains("301"))
        {
            return "Site Moved";
        }
        catch (HttpRequestException e) when (e.Message.Contains("404"))
        {
            return "Page Not Found";
        }
        catch (HttpRequestException e)
        {
            return e.Message;
        }
    }
}

Lihat juga