如何创建可以容纳所有可用内容的类型的列表?

时间:2019-09-18 15:36:41

标签: c# types

我不确定如何用语言表达问题,但我会尽力显示代码和应用程​​序应做的事情。

我正在创建一个可以通过创建JSON文件来创建视频的应用。该文件将在Camtasia中打开。

我上了这个课:

class Track
{
    public string Name { get; set; }
    public bool IsLocked { get; set; } = false;
    public List<Media<Callout>> Content { get; set; }
}

媒体在此文件中:

class Media<T>
{
}

class Callout
{
}

我的问题是,轨道类中的列表不能仅包含媒体。 我需要其他东西,例如媒体或媒体

我要做的是让Content作为Media的列表,Media可以在其中包含任何内容。

我希望我的问题很清楚,否则,我愿意提供其他信息或代码。

1 个答案:

答案 0 :(得分:2)

正如paulsm4在评论中提到的那样,如果您想要真正的任何内容,则可以使用List<Media<object>>track.Content.Add(new Media<Image>())遇到的问题与covariance有关,这是一个非常高级的概念。 TL; DR是如果您进行更改

class Media<T>
{
}

class Media<out T>
{
}

然后它将起作用。

但是,我不认为这是您真正需要的答案。当然,在Media对象中可以拥有的东西必须有 some 约束。因此,解决方案是创建一个类似于IMediaContent的接口,并要求Media中所有可能的东西来实现它。然后,您将Media声明为

class Media<T> where T : IMediaContent
{
}

编辑:我刚刚读了您关于仅要求CalloutImageText等的新评论。然后,我将像

这样声明这些类
class Callout : IMediaContent
{
}