Rumah > pembangunan bahagian belakang > C++ > Adakah corak sepadan dengan alternatif yang unggul untuk penukaran berasaskan jenis tradisional dalam C#?

Adakah corak sepadan dengan alternatif yang unggul untuk penukaran berasaskan jenis tradisional dalam C#?

Barbara Streisand
Lepaskan: 2025-01-28 15:21:09
asal
598 orang telah melayarinya

Is Pattern Matching a Superior Alternative to Traditional Type-Based Switching in C#?

Adakah corak yang sepadan dalam C#lebih baik daripada penukaran berasaskan jenis tradisional?

Dalam bahasa yang tidak menyokong "menukar mengikut jenis" dalam C#, pengaturcara biasanya menggunakan struktur klasik "jika ... jika ... lain" struktur untuk mensimulasikan penukaran berasaskan jenis. Walau bagaimanapun, apabila bilangan jenis meningkat, kaedah ini akan menjadi panjang dan rapuh.

c# 7 dan padanan mod versi yang lebih tinggi

Dari C# 7, pemadanan corak menyediakan cara yang lebih elegan dan lebih ringkas untuk menukar mengikut jenis. Tatabahasa "Jenis Kes" membolehkan jenis pembolehubah yang sepadan, dan dengan berkesan menggantikan pernyataan "jika" dalam kes mod tertentu. contohnya:

C# 6 Gunakan NameOf ()

Dalam C# 6, anda boleh menggunakan simbol pengkomputeran NameOf () untuk mendapatkan nama jenis secara dinamik untuk pernyataan suis. Walaupun ia tidak semudah corak, ia memberikan alternatif yang lebih mudah untuk mengelakkan nama -nama jenis yang keras.
void Foo(object o)
{
    switch (o)
    {
        case A a:    // 匹配A类型
            a.Hop();
            break;
        case B b:    // 匹配B类型
            b.Skip();
            break;
        default:
            throw new ArgumentException("意外类型: " + o.GetType());
    }
}
Salin selepas log masuk

<> c# 5 dan versi berpakaian versi terdahulu

Untuk versi C# 5 dan terdahulu, anda tidak mempunyai pilihan tetapi menggunakan struktur asas "jika ... jika ... lain" struktur dengan nama jenis pengekodan keras. Kaedah ini mungkin menjadi janggal dan mudah membuat kesilapan.

void Foo(object o)
{
    switch (o.GetType().Name)
    {
        case nameof(A):
            // 处理A类型
            break;
        case nameof(B):
            // 处理B类型
            break;
        default:
            // 处理其他类型
            break;
    }
}
Salin selepas log masuk

Kesimpulan

C# 7 dan pemadanan mod versi yang lebih tinggi menyediakan kaedah penukaran berasaskan simulasi yang kuat dan ringkas. Ia menghapuskan permintaan untuk rantaian keadaan, meningkatkan kebolehbacaan kod, dan mengurangkan kemungkinan kesilapan. Untuk versi awal C#, menggunakan NameOf () dan suis pernyataan menyediakan alternatif yang lebih fleksibel daripada nama jenis pengekodan keras, dan struktur klasik "jika ... jika ... lain" struktur masih tidak ideal tetapi masih boleh dilaksanakan .

Atas ialah kandungan terperinci Adakah corak sepadan dengan alternatif yang unggul untuk penukaran berasaskan jenis tradisional dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan