[英]How do I create a list of a type that can hold anything available?
我不確定如何用語言表達問題,但是我將通過顯示代碼和應用程序應做的事情來盡力而為。
我正在創建一個可以通過創建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可以在其中包含任何內容。
我希望我的問題很清楚,否則,我願意提供其他信息或代碼。
正如paulsm4在評論中提到的那樣,如果您確實想要任何東西 ,則可以使用List<Media<object>>
。 您在track.Content.Add(new Media<Image>())
中遇到的問題與協方差有關 , 協方差是一個非常高級的概念。 TL; DR是如果您進行更改
class Media<T>
{
}
至
class Media<out T>
{
}
那么它將起作用。
但是,我認為這不是您真正需要的答案。 當然,您在Media
對象中可以擁有的東西必須受到一定的限制。 因此,解決方案是創建一個像IMediaContent
這樣的接口,並要求Media中所有可能的東西來實現它。 然后,您將Media聲明為
class Media<T> where T : IMediaContent
{
}
編輯:我剛剛閱讀了有關僅需要Callout
, Image
, Text
等的新評論。 然后我將這些類聲明為
class Callout : IMediaContent
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.