如何在内联声明中将对象添加到属性

时间:2013-10-15 07:58:39

标签: c# .net

我知道我的问题标题一点都不好,所以如果有人找到合适的标题,请更改。

如果我有Book和Tag对象。一本书有很多标签。标签有书。如果我像这样创建书籍对象

Book apressMVC4 = new Book()
{
  Id = 1,
  Name = "Apress Pro asp.net mvc4",
  tags = new List<Tag>{
     new Tag{Id = 1, Name = "mvc", Book = ??? how to add this current book apressMVC4},
}};

显然我不能使用apressMVC4变量来存储Tag对象的Book属性,所以如何在这个例子中创建book对象。

1 个答案:

答案 0 :(得分:2)

这样做的唯一方法是分两步打破声明:

Book apressMVC4 = new Book();

apressMVC4.Id = 1;
apressMVC4.Name = "Apress Pro asp.net mvc4";
apressMVC4.tags = new List<Tag>
{
    new Tag { Id = 1, Name = "mvc", Book = apressMVC4 }
};

显然,这不再是单个表达式,如果您尝试初始化字段或在linq表达式中使用它,这可能会很烦人。但是你总是可以使用一些参数将这个逻辑封装在Book构造函数中:

public Book(int id, string name, params Tag[] tags)
{
    this.Id = id;
    this.Name = name;
    this.tags = tags
        .Select(tag => new Tag { Id = tag.id, Name = tag.Name, Book = this })
        .ToList();
}