挑戰在於建立一個能夠在同一清單中保存具有不同類型參數的多個泛型類型的 C# 清單。 考慮一個僅限於值類型的 Metadata<T>
類別。目標是建立一個可以同時儲存 Metadata<int>
、Metadata<bool>
和 Metadata<double>
物件的清單。
直接使用 Metadata<T>
列表是不可能的,因為 T
必須是單一具體類型。 然而,使用繼承的解決方案提供了一種實用的方法。
使用繼承的解:
這種方法引入了一個抽象基底類別Metadata
並從中衍生出像Metadata<T>
這樣的專門類別。
<code class="language-csharp">public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }</code>
現在,可以建立抽象基底類別Metadata
的清單:
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
此列表現在可以容納各種 Metadata<T>
類型的實例:
<code class="language-csharp">metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
這透過為清單提供通用類型 (Metadata
) 優雅地解決了問題,同時允許透過繼承進行特定於類型的實作。 存取每個物件中的特定 T
需要轉換回適當的 Metadata<T>
類型。 這是在 C# 中處理多態性和泛型類型時的常見模式。
以上是C# 清單可以保存具有不同類型參數的多個泛型類型嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!