我有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属性打开以获得各种对象的列表,因为我想插入论文,作者,出版物等......
谢谢!
答案 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 ...
}
});