Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mencapai Pengambilan Nama Harta Jenis-Selamat dalam Versi C# Lama?

Bagaimanakah Saya Boleh Mencapai Pengambilan Nama Harta Jenis-Selamat dalam Versi C# Lama?

DDD
DDDasal
2024-12-26 21:35:15997semak imbas

How Can I Achieve Type-Safe Property Name Retrieval in Older C# Versions?

Penyelesaian Jenis-Selamat untuk Ketiadaan nama Operator dalam C#

Nama pengendali, yang mengembalikan perwakilan rentetan nama sifat , ialah tambahan terbaru kepada C#. Walau bagaimanapun, kekurangan operator ini dalam versi C# yang lebih awal boleh menjadi penghalang kepada penjilidan data selamat taip.

Penyelesaian Jenis-Selamat Menggunakan Ungkapan Lambda

Satu penyelesaian untuk isu ini ialah menggunakan ungkapan lambda untuk mendapatkan nama harta. Pendekatan ini memastikan keselamatan jenis sambil menyediakan fungsi yang serupa dengan nameof. Begini caranya:

  1. Tentukan kelas generik yang dipanggil Nameof dengan kaedah Property statik.
  2. Di dalam kaedah Property, dapatkan semula badan ungkapan lambda yang disediakan.
  3. Letakkan badan sebagai MemberExpression dan ekstrak nama hartanah daripada Ahli medan.

Contoh Penggunaan

Kod berikut menunjukkan cara menggunakan penyelesaian ini:

class Program
{
    static void Main()
    {
        var propName = Nameof<Customer>.Property(e => e.Name);
        Console.WriteLine(propName);
    }
}

public class Nameof<T>
{
    public static string Property<TProp>(Expression<Func<T, TProp>> expression)
    {
        var body = expression.Body as MemberExpression;
        if(body == null)
            throw new ArgumentException("'expression' should be a member expression");
        return body.Member.Name;
    }
}

Dalam contoh ini, propName akan mengandungi rentetan "Nama" selepas menggunakan Harta dengan ungkapan e => e.Nama.

Nota: Penyelesaian ini memerlukan .NET 3.5 atau lebih baru. Untuk .NET 2.0, pendekatan berbeza diperlukan. Walau bagaimanapun, adalah tidak mungkin untuk meniru sepenuhnya kefungsian nameof tanpa menggunakan ungkapan atau pantulan lambda, yang kedua-duanya tidak disokong dalam .NET 2.0.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Pengambilan Nama Harta Jenis-Selamat dalam Versi C# Lama?. 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