Rumah > pembangunan bahagian belakang > C++ > Bolehkah C# Melaksanakan Inferens Jenis Generik Separa, dan Jika Ya, Bagaimana?

Bolehkah C# Melaksanakan Inferens Jenis Generik Separa, dan Jika Ya, Bagaimana?

Barbara Streisand
Lepaskan: 2024-12-31 02:55:09
asal
486 orang telah melayarinya

Can C# Implement Partial Generic Type Inference, and If So, How?

Bolehkah Inferens Jenis Generik Separa Dilaksanakan dalam C#?

Tinjauan Keseluruhan

Artikel ini meneroka cabaran melaksanakan inferens jenis dalam C#, memfokuskan pada had dan penyelesaian berpotensi untuk inferens jenis generik separa.

The Masalah

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.

Penyelesaian

Nampaknya, inferens jenis generik separa tidak disokong secara langsung dalam C# . Walau bagaimanapun, terdapat strategi yang boleh mencapai hasil yang serupa.

Penyelesaian untuk Inferens Jenis Generik Separa

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
Salin selepas log masuk

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
}
Salin selepas log masuk

Dan:

listOfFruits.That().Are<Banana>().Where(banana => banana.Peel != Color.Black)
Salin selepas log masuk

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.

Kesimpulan

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!

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