为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
动漫人物 2019-08-16 15:50:05
C# - 一个列表中的多个泛型类型这可能是不可能的,但我有这个课程:public class Metadata<DataType> where DataType : struct{     private DataType mDataType;}还有更多,但让我们保持简单。泛型类型(DataType)仅限于where语句的值类型。我想要做的是拥有不同类型(DataType)的这些元数据对象的列表。如:List<Metadata> metadataObjects;metadataObjects.Add(new Metadata<int>());metadataObjects.Add(new Metadata<bool>());metadataObjects.Add(new Metadata<double>());这甚至可能吗?
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

public abstract class Metadata

{

}


// extend abstract Metadata class

public class Metadata<DataType> : Metadata where DataType : struct

{

    private DataType mDataType;

}


查看完整回答
反对 回复 2019-08-16
?
偶然的你

TA贡献1841条经验 获得超3个赞

根据leppie的回答,为什么不建立MetaData一个界面:

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


查看完整回答
反对 回复 2019-08-16
?
DIEA

TA贡献1820条经验 获得超2个赞

我还使用了非通用版本,使用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)
    {}}

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


查看完整回答
反对 回复 2019-08-16
  • 3 回答
  • 0 关注
  • 1524 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信