猿问

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

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>());

这甚至可能吗?


动漫人物
浏览 1525回答 3
3回答

一只名叫tom的猫

public abstract class Metadata{}// extend abstract Metadata classpublic class Metadata<DataType> : Metadata where DataType : struct{&nbsp; &nbsp; private DataType mDataType;}

偶然的你

根据leppie的回答,为什么不建立MetaData一个界面:public&nbsp;interface&nbsp;IMetaData&nbsp;{&nbsp;}public&nbsp;class&nbsp;Metadata<DataType>&nbsp;:&nbsp;IMetaData&nbsp;where&nbsp;DataType&nbsp;:&nbsp;struct{ &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;DataType&nbsp;mDataType;}

DIEA

我还使用了非通用版本,使用new关键字:public&nbsp;interface&nbsp;IMetadata{ &nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;DataType&nbsp;{&nbsp;get;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;Data&nbsp;{&nbsp;get;&nbsp;}}public&nbsp;interface&nbsp;IMetadata<TData>&nbsp;:&nbsp;IMetadata{ &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;TData&nbsp;Data&nbsp;{&nbsp;get;&nbsp;}}显式接口实现用于允许两个Data成员:public&nbsp;class&nbsp;Metadata<TData>&nbsp;:&nbsp;IMetadata<TData>{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Metadata(TData&nbsp;data) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Data&nbsp;=&nbsp;data; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;Type&nbsp;DataType &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;typeof(TData);&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;IMetadata.Data &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;Data;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;TData&nbsp;Data&nbsp;{&nbsp;get;&nbsp;private&nbsp;set;&nbsp;}}您可以派生一个版本定位值类型:public&nbsp;interface&nbsp;IValueTypeMetadata&nbsp;:&nbsp;IMetadata{}public&nbsp;interface&nbsp;IValueTypeMetadata<TData>&nbsp;:&nbsp;IMetadata<TData>,&nbsp;IValueTypeMetadata&nbsp;where&nbsp;TData&nbsp;:&nbsp;struct{}public&nbsp;class&nbsp;ValueTypeMetadata<TData>&nbsp;:&nbsp;Metadata<TData>,&nbsp;IValueTypeMetadata<TData>&nbsp;where&nbsp;TData&nbsp;:&nbsp;struct{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;ValueTypeMetadata(TData&nbsp;data)&nbsp;:&nbsp;base(data) &nbsp;&nbsp;&nbsp;&nbsp;{}}这可以扩展到任何类型的通用约束。
随时随地看视频慕课网APP
我要回答