Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mendapatkan Nama Pembolehubah Secara Dinamik dalam C#?

Bagaimanakah Saya Boleh Mendapatkan Nama Pembolehubah Secara Dinamik dalam C#?

Patricia Arquette
Lepaskan: 2024-12-31 04:10:14
asal
134 orang telah melayarinya

How Can I Retrieve Variable Names Dynamically in C#?

Mendapatkan Nama Pembolehubah Secara Dinamik: Meneroka Alternatif dengan Refleksi dan C# 6.0 nama

Mendapatkan nama pembolehubah setelah ia disusun menjadi Pertengahan Bahasa (IL) adalah cabaran biasa dalam pengaturcaraan. Dalam artikel ini, kami akan menyelidiki cara menangani isu ini menggunakan refleksi, ciri berkuasa dalam .NET yang membolehkan kami memeriksa metadata tentang jenis dan ahli semasa masa jalan.

Keterbatasan Refleksi

Pada mulanya, kami mungkin mempertimbangkan untuk memanfaatkan refleksi untuk mendapatkan semula nama pembolehubah. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa pembolehubah tidak mengekalkan nama mereka dalam IL selepas penyusunan. Akibatnya, bergantung semata-mata pada refleksi tidak akan menghasilkan hasil yang diingini.

Masukkan Pohon Ekspresi dan Penutupan: Penyelesaian

Walaupun terdapat batasan refleksi, terdapat penyelesaian yang bijak. Dengan menggunakan pepohon ekspresi, kami boleh mempromosikan pembolehubah kepada penutupan. Teknik ini pada asasnya menangkap konteks pembolehubah pada masa penyusunan, membolehkan kami mengakses namanya kemudian menggunakan GetVariableName kaedah.

Pelaksanaan dan Penggunaan

Berikut ialah contoh yang menunjukkan pendekatan ini:

static string GetVariableName<T>(Expression<Func<T>> expr)
{
    var body = (MemberExpression)expr.Body;
    return body.Member.Name;
}

static void Main()
{
    var someVar = 3;
    Console.Write(GetVariableName(() => someVar));
}
Salin selepas log masuk

Kaedah ini beroperasi dengan mengekstrak contoh MemberExpression daripada badan daripada ungkapan lambda yang disediakan. Sifat Ahli MemberExpression kemudiannya memegang nama pembolehubah.

Kelemahan dan Pertimbangan Prestasi

Walaupun penyelesaian ini memintas pengehadan refleksi, ia datang dengan kelemahan prestasi. Penciptaan berbilang objek, panggilan kaedah tidak boleh selaras yang berlebihan, dan penggunaan pantulan berat boleh memperkenalkan kependaman. Oleh itu, adalah disyorkan untuk mengelak daripada menggunakan pendekatan ini dalam laluan kod kritikal prestasi.

Nama Kata Kunci C# 6.0: Penyelesaian yang Lebih Mudah

Dengan kemunculan C# 6.0 , penyelesaian yang jauh lebih mudah muncul: nama kata kunci. Kata kunci ini menyediakan cara yang ringkas dan mudah untuk mengakses nama pembolehubah, sifat atau kaedah pada masa penyusunan.

Dalam contoh asal kami, kini kami boleh mendapatkan semula nama pembolehubah menggunakan nameof, seperti yang dilihat di bawah:

static void Main()
{
    var someVar = 3;
    Console.Write(nameof(someVar));
}
Salin selepas log masuk

Nama kata kunci menawarkan fungsi yang sama seperti kaedah GetVariableName tetapi dengan penambahbaikan prestasi.

Kesimpulan

Mendapatkan semula nama pembolehubah dalam .NET memerlukan pertimbangan yang teliti. Walaupun pokok pantulan dan ekspresi menyediakan penyelesaian untuk mendapatkan nama pembolehubah semasa masa jalan, impak prestasinya mesti diambil kira. Sebaliknya, kata kunci nama C# 6.0 menghapuskan kebimbangan prestasi ini dan berfungsi sebagai penyelesaian yang lebih cekap untuk tugas ini.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nama Pembolehubah Secara Dinamik dalam C#?. 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