Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyimpan Pelbagai Jenis Generik dalam Senarai Tunggal dalam C#?

Bagaimanakah Saya Boleh Menyimpan Pelbagai Jenis Generik dalam Senarai Tunggal dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-01-18 16:41:09938semak imbas

How Can I Store Multiple Generic Types in a Single List in C#?

Senarai dalam C# menyimpan berbilang jenis generik

Jenis generik dalam C# menyediakan mekanisme yang berkuasa untuk mencipta kelas dan kaedah yang boleh beroperasi pada pelbagai jenis data. Walau bagaimanapun, masalah biasa sering timbul apabila cuba menggunakan berbilang jenis generik dalam senarai.

Pertimbangkan contoh berikut:

<code class="language-csharp">public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}

List<Metadata<DataType>> metadataObjects; //错误: DataType 未定义
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>

Matlamat di sini ialah untuk membuat senarai yang mengandungi objek Metadata daripada jenis data yang berbeza. Walau bagaimanapun, kekangan Metadata<DataType> pada kelas where mengehadkan jenis generik DataType kepada jenis nilai. Ini bermakna metadataObjects bahawa setiap item dalam senarai mestilah daripada jenis generik yang sama, jadi anda tidak boleh menambah objek daripada jenis yang berbeza.

Untuk mengatasi had ini, satu cara adalah dengan memperkenalkan kelas asas abstrak untuk Metadata seperti berikut:

<code class="language-csharp">public abstract class Metadata
{
}

// 继承抽象 Metadata 类
public class Metadata<DataType> : Metadata where DataType : struct
{
    private DataType mDataType;
}</code>

Dengan mencipta kelas asas abstrak Metadata, kelas generik Metadata<DataType> kini boleh melanjutkan kelas asas ini. Ini membolehkan kami mempunyai senarai Metadata objek di mana setiap item boleh menjadi jenis generik yang berbeza.

Kod yang diubah suai adalah seperti berikut:

<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>

Kini metadataObjects senarai boleh menyimpan objek daripada jenis nilai yang berbeza, dengan berkesan mencapai matlamat untuk mempunyai berbilang jenis generik dalam senarai. Perlu diingatkan bahawa penukaran jenis diperlukan apabila mengakses atribut mDataType, kerana kelas asas Metadata tidak mengetahui DataType khusus.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyimpan Pelbagai Jenis Generik dalam Senarai Tunggal dalam C#?. 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