Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengembalikan Null dengan Selamat daripada Kaedah Generik C# dengan Parameter Jenis T?

Bagaimanakah Saya Boleh Mengembalikan Null dengan Selamat daripada Kaedah Generik C# dengan Parameter Jenis T?

Susan Sarandon
Lepaskan: 2025-01-09 17:26:43
asal
766 orang telah melayarinya

How Can I Safely Return Null from a C# Generic Method with a Type Parameter T?

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>
Salin selepas log masuk

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:

  1. 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 '.

  2. 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.

  3. 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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan