Rumah > pembangunan bahagian belakang > C++ > Mengapa C# Tidak Menyokong Kekangan Jenis Enum, dan Apakah Penyelesaian Wujud?

Mengapa C# Tidak Menyokong Kekangan Jenis Enum, dan Apakah Penyelesaian Wujud?

DDD
Lepaskan: 2024-12-30 09:14:11
asal
424 orang telah melayarinya

Why Doesn't C# Support Enum Type Constraints, and What Workarounds Exist?

Kekangan Jenis Enum dalam C#: Penjelasan Komprehensif

Dalam C#, kekangan jenis membenarkan pembangun menyekat jenis yang dibenarkan untuk parameter kaedah atau sifat . Walaupun jenis enum adalah asas kepada C#, mereka tidak mempunyai kekangan jenis terbina dalam. Keputusan reka bentuk ini telah membingungkan ramai pengaturcara, mendorong pertanyaan tentang rasionalnya.

Mengapa Sekatan C#?

Tidak seperti jenis rujukan, enum ialah jenis nilai, setiap satu mewakili pemalar nilai dalam set yang ditentukan. Menguatkuasakan kekangan jenis pada enum akan menyebabkan beberapa komplikasi:

  • Kekaburan: Kekangan jenis enum memerlukan jenis enum disimpulkan daripada nilai parameter, mewujudkan potensi kekaburan dalam tertentu senario.
  • Kompilasi Kerumitan: Menentukan sama ada nilai parameter memenuhi kekangan jenis enum akan meningkatkan kerumitan kompilasi, yang berpotensi menghalang prestasi dan kebolehbacaan kod.
  • Tidak Diperluaskan: Kekangan jenis pada enum akan mempunyai menghalang mereka daripada diperluaskan dengan mewarisi nilai baharu, yang merupakan ciri utama enum dalam C#.

Penyelesaian:

Walaupun C# tidak membenarkan kekangan jenis enum secara asli, penyelesaian yang bijak telah ditemui. Menggunakan generik dan khususnya kelas Enum, adalah mungkin untuk mencipta jenis tersuai, Enums, dengan kaedah seperti Parse yang boleh menerima nilai rentetan dan menukarnya kepada enum jenis yang diingini. Kaedah ini mencapai kesan yang sama seperti kekangan jenis tanpa kelemahan yang wujud.

Sintaks untuk menggunakan penyelesaian ini adalah seperti berikut:

public static TEnum Parse<TEnum>(string name) where TEnum : struct, Enum
{
    return (TEnum)Enum.Parse(typeof(TEnum), name);
}
Salin selepas log masuk

Untuk menggunakannya, anda boleh menghubungi:

Enums.Parse<DateTimeKind>("Local")
Salin selepas log masuk

Batasan:

Sementara ini penyelesaian menyediakan penyelesaian, ia mempunyai hadnya:

  • Ia tidak boleh digunakan untuk kaedah sambungan.
  • Ia memerlukan kod boilerplate tambahan.

Walaupun demikian pengehadan, penyelesaian ini membolehkan pembangun mencapai fungsi yang serupa dengan kekangan jenis enum dalam C#, membolehkan mereka menguatkuasakan semakan parameter yang lebih ketat dan tingkatkan kualiti kod.

Atas ialah kandungan terperinci Mengapa C# Tidak Menyokong Kekangan Jenis Enum, dan Apakah Penyelesaian Wujud?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan