C# 不同类型的列表
我有一个提要项对象的列表,每个提要项对象都有一个Attributes属性,而Attributes属性又是一个列表。然而,这个列表需要改变,我需要能够稍后从属性推断出我正在查看的提要项的类型 到目前为止,我已经尝试了几种方法,但是我很难对它们进行全面的思考,因为我不完全理解更具体的OOP概念,比如泛型。以下是我到目前为止的结论:C# 不同类型的列表,c#,C#,我有一个提要项对象的列表,每个提要项对象都有一个Attributes属性,而Attributes属性又是一个列表。然而,这个列表需要改变,我需要能够稍后从属性推断出我正在查看的提要项的类型 到目前为止,我已经尝试了几种方法,但是我很难对它们进行全面的思考,因为我不完全理解更具体的OOP概念,比如泛型。以下是我到目前为止的结论: public class FeedItem { public int Id { get; set; } public string Type { get;
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
的列表,其中公开了相关属性。如果它们没有公共属性,那么不清楚列表的用途,您可能应该定义一个可以映射到的公共结构。我希望我可以标记这两个答案。这对我也有帮助。:)谢谢我希望我能把两个答案都标上。这对我也有帮助。:)谢谢