Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menangani Mengembalikan Null daripada Kaedah Generik dalam 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:
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.
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.
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!