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
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)); }
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)); }
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!