C# 不同类型的列表

C# 不同类型的列表,c#,C#,我有一个提要项对象的列表,每个提要项对象都有一个Attributes属性,而Attributes属性又是一个列表。然而,这个列表需要改变,我需要能够稍后从属性推断出我正在查看的提要项的类型 到目前为止,我已经尝试了几种方法,但是我很难对它们进行全面的思考,因为我不完全理解更具体的OOP概念,比如泛型。以下是我到目前为止的结论: public class FeedItem { public int Id { get; set; } public string Type { get;

我有一个提要项对象的列表,每个提要项对象都有一个Attributes属性,而Attributes属性又是一个列表。然而,这个列表需要改变,我需要能够稍后从属性推断出我正在查看的提要项的类型

到目前为止,我已经尝试了几种方法,但是我很难对它们进行全面的思考,因为我不完全理解更具体的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; }
}
公共类饲料项目
{
公共int Id{get;set;}
公共字符串类型{get;set;}
公共列表属性{get;set;}
公共日期时间日期{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 ... 
            }
        });
var feedData=新列表();
feedData.Add(添加新的FeedItem
{
日期=新的日期时间(2015年3月3日),
Type=“library”,
Id=1,
属性=新列表(){
…在这里添加文件。。。
}
});
我遇到的问题是,它试图转换对象中的纸张。其思想是保持Attributes属性对各种对象的列表开放,因为我确实希望插入论文、作者、出版物等


谢谢

听起来您需要
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>() {

        }
    });
公共类饲料项目
{
公共列表属性{get;set;}
}
var feedData=新列表();
feedData.Add(添加新的FeedItem
{
属性=新列表(){
}
});

如果您需要在一个列表中包含多种类型的属性(但在您的示例中,您明确创建了一个
列表
,我认为您不需要),那么请使用
纸张
作者
,等等。实现一个公共界面并为此键入
列表
。它们都必须提供一些共同的功能——一系列完全不同的东西的列表是无用的,对吗?

听起来你需要
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>() {

        }
    });
公共类饲料项目
{
公共列表属性{get;set;}
}
var feedData=新列表();
feedData.Add(添加新的FeedItem
{
属性=新列表(){
}
});
如果您需要在一个列表中包含多种类型的属性(但在您的示例中,您明确创建了一个
列表
,我认为您不需要),那么请使用
纸张
作者
,等等。实现一个公共界面并为此键入
列表
。它们都必须提供一些共同的功能——一系列完全不同的东西的列表是无用的,对吗?

一个
列表
不是
列表
——因为它只能容纳
纸张。您可以将其声明为一个
列表
(或者将其他一些常用的基本类型声明为您想要支持的所有类型),并用
文件
填充它:

feedData.Add(new FeedItem
        {
            Date = new DateTime(2015, 3, 3),
            Type = "library",
            Id = 1,
            Attributes = new List<object>() { 
             ... add papers here ... 
            }
        });
列表
不是
列表
——因为它只能容纳
纸张
s。您可以将其声明为一个
列表
(或者将其他一些常用的基本类型声明为您想要支持的所有类型),并用
文件
填充它:

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

为什么将
属性初始化为
新列表()
而不是
新列表()
?为
论文
作者
出版物
创建基类,并使用该基类而不是
列表
,虽然不确定
作者
论文
在类模型中如何关联,但可以创建一个
IAttribute
接口,该接口可以
论文
作者
出版物
都实现并使用一个
列表
。为什么要将
属性
初始化为
新列表()
代替
新建列表()
?为
论文
作者
出版物
创建基类,并使用该基类代替
列表
,虽然不确定
作者
论文
在类模型中如何关联,但可以创建一个
IAttribute
接口,该接口可以
论文
作者
出版物
都实现并使用
列表
。这几乎就是我需要的。正如您在回答中提到的,列表需要包含不同类型的提要项。因此,实例化一个列表会将我限制为一个列表。我需要一个不同类型的提要项列表。现实世界的情况是,我可能已经将作者添加到我的兴趣中,或者将论文添加到我的图书馆,或者修改了我的个人资料页面。所有这些操作都将是不同类型的FeedItem,它们都将在列表中(转换为JSON并发送给客户端)。@Ainxty在这种情况下,我将使
FeedItem
非泛型,并使
Attributes
成为
IAttribute
的列表,其中公开了相关属性。如果它们没有公共属性,那么不清楚列表的用途,您可能应该定义一个可以映射到的公共结构。这几乎就是我需要的。正如您在回答中提到的,列表需要包含不同类型的提要项。因此,实例化一个列表会将我限制为一个列表。我需要一个不同类型的提要项列表。现实世界的情况是,我可能已经将作者添加到我的兴趣中,或者将论文添加到我的图书馆,或者修改了我的个人资料页面。所有这些操作都将是不同类型的FeedItem,它们都将在列表中(转换为JSON并发送给客户端)。@Ainxty在这种情况下,我将使
FeedItem
非泛型,并使
Attributes
成为
IAttribute
的列表,其中公开了相关属性。如果它们没有公共属性,那么不清楚列表的用途,您可能应该定义一个可以映射到的公共结构。我希望我可以标记这两个答案。这对我也有帮助。:)谢谢我希望我能把两个答案都标上。这对我也有帮助。:)谢谢