Mengembalikan nilai Null daripada kaedah generik dalam C#
Dalam kaedah generik C#, tidak selalu mudah untuk mengembalikan null apabila parameter jenis boleh menjadi jenis rujukan atau jenis nilai. Masalah ini berlaku apabila jenis pemulangan ialah parameter jenis T.
Pertimbangkan coretan kod berikut:
<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”,因为它可能是值类型。请考虑改用“default(T)”代替。 }</code>
Kod ini cuba mengembalikan nol jika elemen padanan tidak ditemui dalam koleksi, tetapi ralat binaan berlaku. Mesej ralat menyatakan bahawa null tidak boleh ditukar kepada parameter jenis T kerana T mungkin jenis nilai.
Terdapat tiga cara untuk menyelesaikan masalah ini:
Kembalikan nilai lalai: Anda boleh menggunakan default(T)
untuk mengembalikan nilai lalai jenis T. Ini mengembalikan null untuk jenis rujukan dan nilai lalai yang sesuai untuk jenis nilai, cth. 0 untuk int dan ' untuk char '.
Hadkan T kepada jenis rujukan: Jika anda tahu bahawa T hanya boleh menjadi jenis rujukan, anda boleh menambah kekangan where T : class
pada pengisytiharan kaedah. Ini akan membolehkan anda mengembalikan null seperti biasa.
Hadkan T kepada jenis nilai bukan nol: Jika anda tahu bahawa T akan menjadi jenis nilai bukan nol, anda boleh menambah kekangan where T : struct
dan mengembalikan null seperti biasa. Ambil perhatian bahawa ini mengembalikan nilai nol jenis nilai boleh batal, bukan rujukan nol.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengembalikan Null dengan Selamat daripada Kaedah Generik C# dengan Parameter Jenis T?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!