挑战在于创建一个能够在同一列表中保存具有不同类型参数的多个泛型类型的 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中文网其他相关文章!