首页 > 后端开发 > C++ > C# 列表可以保存具有不同类型参数的多个泛型类实例吗?

C# 列表可以保存具有不同类型参数的多个泛型类实例吗?

Mary-Kate Olsen
发布: 2025-01-18 16:36:09
原创
603 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板