Kesesuaian Penukaran Nilai dalam Kaedah Generik
Dalam C#, kaedah generik boleh menghadapi isu penukaran apabila bekerja dengan parameter jenis. Apabila menggunakan operator 'typeof(T)' dalam kaedah generik, adalah penting untuk mempertimbangkan jenis sebenar yang diwakili oleh T semasa pelaksanaan.
Seperti yang ditunjukkan dalam coretan kod yang disediakan:
T HowToCast<T>(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; }
Pengkompil menganggap anda mahu menghantar 't' terus ke rentetan, walaupun semak 'typeof(T) == typeof(string)', dan ralat masa kompilasi dihasilkan. Sebab ralat ini ialah, pada masa penyusunan, pengkompil tidak tahu apa yang diwakili oleh T dan menganggap ia boleh menjadi sebarang jenis.
Untuk menyelesaikan isu ini, anda perlu menghantar 't' ke jenis perantaraan yang menyokong penukaran kepada rentetan. Dalam C#, semua objek melaksanakan jenis 'objek', yang boleh secara tersirat dihantar ke rentetan. Oleh itu, anda boleh menggunakan kod berikut:
T newT1 = (T)(object)"some text"; string newT2 = (string)(object)t;
Dengan menghantar 't' kepada 'objek' dahulu, anda memastikan ia boleh ditukar kemudiannya kepada rentetan, kerana 'objek' ialah jenis asas untuk semua objek dalam C#.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Isu Keserasian Penukaran Nilai dalam Kaedah Generik C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!