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;
}
偶然的你
TA贡献1841条经验 获得超3个赞
根据leppie的回答,为什么不建立MetaData
一个界面:
public interface IMetaData { }public class Metadata<DataType> : IMetaData where DataType : struct{ private DataType mDataType;}
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) {}}
这可以扩展到任何类型的通用约束。
- 3 回答
- 0 关注
- 1524 浏览
添加回答
举报
0/150
提交
取消