首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# -一个列表中的多个泛型类型

C# -一个列表中的多个泛型类型
EN

Stack Overflow用户
提问于 2008-12-09 15:29:58
回答 3查看 111.1K关注 0票数 168

这可能是不可能的,但我有这样一个类:

public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}

还有更多的内容,但让我们保持简单。where语句将泛型类型(DataType)限制为值类型。我想要做的是拥有这些不同类型的元数据对象(DataType)的列表。例如:

List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());

这有可能吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-09 15:31:57

public abstract class Metadata
{
}

// extend abstract Metadata class
public class Metadata<DataType> : Metadata where DataType : struct
{
    private DataType mDataType;
}
票数 216
EN

Stack Overflow用户

发布于 2008-12-09 15:41:17

按照leppie的回答,为什么不让MetaData成为一个接口:

public interface IMetaData { }

public class Metadata<DataType> : IMetaData where DataType : struct
{
    private DataType mDataType;
}
票数 96
EN

Stack Overflow用户

发布于 2008-12-09 16:14:39

我还使用了一个非通用版本,使用了new关键字:

public interface IMetadata
{
    Type DataType { get; }

    object Data { get; }
}

public interface IMetadata<TData> : IMetadata
{
    new TData Data { get; }
}

显式接口实现用于允许两个Data成员:

public class Metadata<TData> : IMetadata<TData>
{
    public Metadata(TData data)
    {
       Data = data;
    }

    public Type DataType
    {
        get { return typeof(TData); }
    }

    object IMetadata.Data
    {
        get { return Data; }
    }

    public TData Data { get; private set; }
}

您可以派生一个针对值类型的版本:

public interface IValueTypeMetadata : IMetadata
{

}

public interface IValueTypeMetadata<TData> : IMetadata<TData>, IValueTypeMetadata where TData : struct
{

}

public class ValueTypeMetadata<TData> : Metadata<TData>, IValueTypeMetadata<TData> where TData : struct
{
    public ValueTypeMetadata(TData data) : base(data)
    {}
}

这可以扩展到任何类型的通用约束。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/353126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档