不同类型的列表

时间:2015-03-04 20:39:55

标签: c#

我有Feed项目对象列表,每个Feed项目对象都有一个Attributes属性,而该属性又是一个列表。但是,此列表需要更改,我需要稍后从属性中推断出我正在查看的Feed项目类型。

到目前为止,我已经尝试了几件事,但是我很难绕过它们,因为我不完全理解更具体的OOP概念,如泛型。这是我到目前为止所得到的:

public class FeedItem
{
    public int Id { get; set; }
    public string Type { get; set; }
    public List<object> Attributes { get; set; }
    public DateTime Date { get; set; }
}

以下是列表:

var feedData = new List<FeedItem>();
feedData.Add(new FeedItem
        {
            Date = new DateTime(2015, 3, 3),
            Type = "library",
            Id = 1,
            Attributes = new List<Paper>() { 
             ... add papers here ... 
            }
        });

我遇到的问题是它试图在对象中转换Paper。我的想法是保持Attributes属性打开以获得各种对象的列表,因为我想插入论文,作者,出版物等......

谢谢!

2 个答案:

答案 0 :(得分:5)

听起来你需要FeedItem是通用的:

public class FeedItem<T>
{
    public List<T> Attributes { get; set; }
}

var feedData = new List<FeedItem<Paper>>();
feedData.Add(new FeedItem<Paper>
    {
        Attributes = new List<Paper>() {

        }
    });

如果您需要在一个列表中使用多种类型的属性(但在您的示例中,您明确创建了List<Paper>,我认为您没有),那么Paper,{{1实现一个公共接口并输入Author。他们都必须提供一些共同的功能 - 一堆完全不同的东西是无用的,对吗?

答案 1 :(得分:1)

List<Paper> List<object> - 因为它只能保留Paper个。您可以将其声明为List<object>(或者您要支持的所有类型的其他常见基类型),并使用Papers填充它:

feedData.Add(new FeedItem
        {
            Date = new DateTime(2015, 3, 3),
            Type = "library",
            Id = 1,
            Attributes = new List<object>() { 
             ... add papers here ... 
            }
        });

或使FeedItem通用 - 这里的缺点是您必须预定义FeedItem可以具有的属性类型:

public class FeedItem<T>
{
    public int Id { get; set; }
    public string Type { get; set; }
    public List<T> Attributes { get; set; }
    public DateTime Date { get; set; }
}

var feedData = new List<FeedItem<Paper>>();
feedData.Add(new FeedItem<Paper>
        {
            Date = new DateTime(2015, 3, 3),
            Type = "library",
            Id = 1,
            Attributes = new List<Paper>() { 
             ... add papers here ... 
            }
        });