首頁 > 後端開發 > C++ > C# 清單可以保存具有不同類型參數的多個泛型類別實例嗎?

C# 清單可以保存具有不同類型參數的多個泛型類別實例嗎?

Mary-Kate Olsen
發布: 2025-01-18 16:36:09
原創
602 人瀏覽過

Can a C# List Hold Multiple Generic Class Instances with Different Type Parameters?

C#中能否建立泛型類型的清單?

在C#中,可以建立一個有泛型型別參數的類別。但是,能否建立一個列表,其中包含多個具有不同類型參數的此泛型類別的不同實例?

讓我們考慮以下範例:

<code class="language-csharp">public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}</code>
登入後複製

這裡,我們有一個泛型類別Metadata,可用於不同的值型別。現在,假設我們想要建立一個這些Metadata物件的列表,這些物件具有不同的類型。我們能做到嗎?

<code class="language-csharp">List<Metadata<DataType>> metadataObjects; // 错误:DataType 未定义
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
登入後複製

不幸的是,這在C#中是不可能的,因為列表的泛型類型參數對於所有元素都必須相同。要克服此限制,可以使用繼承和抽象類別。

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

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

現在,您可以建立一個抽象基底類別MetadataBase的清單。這允許您將不同類型的Metadata物件新增至清單:

<code class="language-csharp">List<MetadataBase> metadataObjects = new List<MetadataBase>();
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
登入後複製

透過使用抽象基類,我們成功地建立了一個可以容納不同類型Metadata實例的清單。 需要注意的是,存取清單中元素的mDataType屬性時需要進行類型轉換,因為MetadataBase不包含該屬性。 這需要根據具體情況進行處理,例如使用dynamic類型或is運算符進行類型檢查和轉換。

以上是C# 清單可以保存具有不同類型參數的多個泛型類別實例嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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