Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menangani Mengembalikan Null daripada Kaedah Generik dalam C#?

Bagaimana untuk Menangani Mengembalikan Null daripada Kaedah Generik dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-09 17:07:42143semak imbas

How to Handle Returning Null from Generic Methods in C#?

Mengembalikan nilai nol dalam kaedah generik C#

Apabila mencipta kaedah generik, pembangun mungkin menghadapi masalah mengembalikan nilai nol daripada kaedah dengan parameter jenis generik. Dalam coretan kod yang disediakan:

<code class="language-csharp">static T FindThing<T>(IList collection, int id) where T : IThing, new()
{
    foreach (T thing in collection)
    {
        if (thing.Id == id)
            return thing;
    }
    return null;  // 错误:无法将 null 转换为类型参数 'T'
}</code>

Pengkompil akan menjana ralat "Tidak boleh menukar null kepada parameter taip 'T' kerana ia mungkin jenis nilai. Pertimbangkan untuk menggunakan 'default(T)' sebaliknya." Ini kerana anda tidak boleh terus mengembalikan null untuk jenis generik yang mengandungi jenis nilai (struct).

Menyelesaikan ralat

Untuk menyelesaikan masalah ini, pembangun mempunyai tiga pilihan:

  1. Kembalikan nilai lalai: Gunakan kata kunci default atau default(T) untuk mengembalikan nilai lalai jenis T. Ini mengembalikan null untuk jenis rujukan, 0 untuk integer dan ' untuk aksara ', dsb.

  2. Mengehadkan jenis generik: Jika kaedah boleh dihadkan untuk mengembalikan jenis rujukan sahaja, anda boleh menambah kekangan where T : class. Ini membolehkan mengembalikan null secara langsung.

  3. Kembalikan nilai nol sebagai nilai boleh batal: Jika kaedah boleh dihadkan untuk mengembalikan jenis nilai bukan nol sahaja, kekangan where T : struct boleh digunakan. Dalam kes ini, null boleh dikembalikan sebagai nilai null bagi jenis nilai yang boleh dibatalkan.

Atas ialah kandungan terperinci Bagaimana untuk Menangani Mengembalikan Null daripada Kaedah Generik dalam C#?. 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