我不确定如何用语言表达问题,但我会尽力显示代码和应用程序应做的事情。
我正在创建一个可以通过创建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可以在其中包含任何内容。
我希望我的问题很清楚,否则,我愿意提供其他信息或代码。
答案 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
{
}
编辑:我刚刚读了您关于仅要求Callout
,Image
,Text
等的新评论。然后,我将像
class Callout : IMediaContent
{
}