Artikel ini meneroka cabaran melaksanakan inferens jenis dalam C#, memfokuskan pada had dan penyelesaian berpotensi untuk inferens jenis generik separa.
Kes penggunaan yang diterangkan ialah kaedah sambungan harus tersedia untuk kelas asas tertentu, dengan parameter generik yang berkaitan dengan hujah kaedah. Walau bagaimanapun, kaedah sambungan juga harus mengembalikan jenis khusus yang berkaitan dengan keturunan tertentu yang digunakan.
Nampaknya, inferens jenis generik separa tidak disokong secara langsung dalam C# . Walau bagaimanapun, terdapat strategi yang boleh mencapai hasil yang serupa.
Kaedah 1: Menggunakan Kekangan Jenis
Sintaks serupa dengan kod yang dikehendaki boleh dicapai menggunakan jenis kekangan:
public static TReg Parameter<TReg, T>(this TReg p, string name, T value) where TReg : ParameterizedRegistrationBase
Pendekatan ini memerlukan penentuan kedua-dua hujah jenis generik semasa seruan, yang mungkin tidak diingini dalam semua kes.
Kaedah 2: Menggunakan Dua Fungsi dengan Pembungkus
Pendekatan ini melibatkan pembahagian operasi kepada dua fungsi:
public static ThatAreWrapper<TSource> That<TSource>(this IEnumerable<TSource> source) { return new ThatAreWrapper<TSource>(source); } public class ThatAreWrapper<TSource> { // ... Implementation }
Dan:
listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
Penyelesaian ini memerlukan langkah tambahan, tetapi membolehkan lebih fleksibiliti dalam menentukan jenis hasil.
Kaedah 3 : Memperluas Kelas Asas
Dengan memperkenalkan kaedah sambungan terus ke dalam kelas asas, masalah itu dapat dielakkan. Walau bagaimanapun, pendekatan ini mengalih keluar keupayaan untuk menggunakan kaedah sambungan pada kelas lain pada masa hadapan.
Inferens jenis generik separa tidak disokong secara langsung dalam C#, tetapi terdapat penyelesaian yang boleh menyediakan fungsi yang serupa. Pendekatan khusus untuk digunakan bergantung pada keperluan khusus dan pertukaran yang terlibat.
Atas ialah kandungan terperinci Bolehkah C# Melaksanakan Inferens Jenis Generik Separa, dan Jika Ya, Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!