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