Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menetapkan Nilai Harta Menggunakan Refleksi Apabila Nilai ialah Rentetan?

Bagaimanakah Saya Boleh Menetapkan Nilai Harta Menggunakan Refleksi Apabila Nilai ialah Rentetan?

Susan Sarandon
Susan Sarandonasal
2025-01-20 10:37:09777semak imbas

How Can I Set a Property's Value Using Reflection When the Value is a String?

Gunakan refleksi untuk menetapkan nilai atribut rentetan

Pengenalan: Memanipulasi objek secara pemrograman melalui refleksi selalunya memerlukan penetapan sifat menggunakan tugasan pelbagai jenis data. Soalan ini meneroka situasi biasa: menetapkan sifat dengan nilai rentetan.

Soalan: Pertimbangkan kelas Kapal yang mempunyai sifat Latitud jenis berganda. Cuba tetapkan sifat ini menggunakan refleksi, kodnya adalah seperti berikut:

<code>Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, value, null);</code>

Walau bagaimanapun, kod ini gagal dengan ArgumentException kerana nilai rentetan tidak boleh ditukar terus kepada double.

Penyelesaian: Untuk menyelesaikan isu ini, nilai rentetan mesti ditukar secara eksplisit kepada jenis yang betul berdasarkan PropertyInfo. Alat biasa untuk tujuan ini ialah Convert.ChangeType(). Ia menggunakan maklumat masa jalan untuk menukar antara jenis IConvertible.

Kod yang diubah suai menggunakan Convert.ChangeType() ialah:

<code>Ship ship = new Ship();
string value = "5.5";
PropertyInfo propertyInfo = ship.GetType().GetProperty("Latitude");
propertyInfo.SetValue(ship, Convert.ChangeType(value, propertyInfo.PropertyType), null);</code>

Kod ini berjaya menetapkan sifat Latitud kepada nilai berganda yang ditukar.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menetapkan Nilai Harta Menggunakan Refleksi Apabila Nilai ialah Rentetan?. 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