首頁 > 後端開發 > C++ > 如何在 C# 中的單一清單中儲存多個泛型類型?

如何在 C# 中的單一清單中儲存多個泛型類型?

Barbara Streisand
發布: 2025-01-18 16:41:09
原創
937 人瀏覽過

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

C#中列表儲存多種泛型類型

C#中的泛型類型為建立可操作各種資料類型的類別和方法提供了強大的機制。然而,當嘗試在一個清單中使用多個泛型類型時,通常會遇到一個常見問題。

考慮以下範例:

<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>
登入後複製

這裡的目標是建立一個包含不同資料類型的Metadata物件的清單。但是,Metadata<DataType> 類別上的where約束將泛型類型DataType限制為值類型。這意味著metadataObjects清單中的每個項目都必須是相同的泛型類型,因此無法新增不同類型的物件。

為了克服這個限制,一個方法是為Metadata引入一個抽象基類,如下所示:

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

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

透過建立一個抽象基底類別Metadata,泛型類別Metadata<DataType>現在可以擴充此基底類別。這允許我們擁有一個Metadata物件的列表,其中每個項目可以是不同的泛型類型。

修改後的程式碼如下圖所示:

<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>
登入後複製

現在,metadataObjects列表可以保存不同值類型的對象,有效地實現了在一個列表中擁有多個泛型類型的目標。 要注意的是,在存取mDataType屬性時需要進行型別轉換,因為Metadata基類並不知道具體的DataType

以上是如何在 C# 中的單一清單中儲存多個泛型類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板