Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah kita dapat melaksanakan logik yang bergantung kepada jenis dalam C# tanpa ciri 'Switch On Type' langsung?

Bagaimanakah kita dapat melaksanakan logik yang bergantung kepada jenis dalam C# tanpa ciri 'Switch On Type' langsung?

Linda Hamilton
Linda Hamiltonasal
2025-01-28 15:16:09182semak imbas

How Can We Implement Type-Dependent Logic in C# Without a Direct

melampaui batasan C#'s' switch on type '

C# tidak secara langsung menyokong pernyataan "Switch On Type". Batasan ini timbul dari kekaburan yang wujud dalam hierarki jenis; Objek berpotensi sepadan dengan pelbagai kes. Walau bagaimanapun, beberapa penyelesaian yang elegan wujud untuk mencapai logik yang bergantung kepada jenis.

memanfaatkan padanan corak (c# 7 dan kemudian)

diperkenalkan dalam C# 7, pemadanan corak menawarkan cara yang ringkas dan mudah dibaca untuk mengendalikan logik berasaskan jenis dalam

pernyataan. Perhatikan contohnya: switch

<code class="language-csharp">switch (shape)
{
    case Circle c:
        Console.WriteLine($"Circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        Console.WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        Console.WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    // ... more cases
}</code>
Taipkan Switching berasaskan Nama (C# 6 dan kemudian)

c# 6 dan versi kemudian memberikan pengendali

, membolehkan suis berdasarkan nama jenis:

nameof()

<code class="language-csharp">switch (o.GetType().Name)
{
    case nameof(AType):
        // Handle AType
        break;
    case nameof(BType):
        // Handle BType
        break;
}</code>
Switching berasaskan rentetan (C# 5 dan lebih awal)

Untuk versi C# yang lebih tua (5 dan ke bawah), suis berasaskan rentetan menggunakan nama jenis diperlukan:

Walaupun kaedah ini secara berkesan meniru "menukar pada jenis," mereka mungkin tidak selalu menawarkan tahap keanggunan atau pemeliharaan yang sama sebagai ciri bahasa yang berdedikasi. Pilihan bergantung pada versi C# dan tahap kejelasan kod yang dikehendaki.
<code class="language-csharp">switch (o.GetType().Name)
{
    case "AType":
        // Handle AType
        break;
}</code>

Atas ialah kandungan terperinci Bagaimanakah kita dapat melaksanakan logik yang bergantung kepada jenis dalam C# tanpa ciri 'Switch On Type' langsung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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