List< T>在类中使用
本文关键字:List | 更新日期: 2023-09-27 18:06:01
我找到了一个关于在类中使用List的代码示例。有些密码我不懂。名称和描述字段在列表定义中有值,但专辑字段没有值。(
new genre { Name = "Rock" , Description = "Rock music", Album?? }
),为什么?
public class Genre
{
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
public class Album
{
public string Title { get; set; }
public decimal Price { get; set; }
public Genre Genre { get; set; }
}
var genre = new List<Genre>
{
new genre { Name = "Rock" , Description = "Rock music" },
new genre { Name = "Classic" , Description = "Middle ages music" }
};
new List<Album>
{
new Album { Title = "Queensrÿche", Price = 8.99M, Genre = genre.Single(g => g.Name == "Rock") },
new Album { Title = "Chopin", Price = 8.99M, Genre = genre.Single(g => g.Name == "Classic") }
};
这种c#语法叫做Object and Collection initializers
。
这是文档。
该语法允许您设置在对象或集合初始化期间可以访问的属性。
这些是对象和集合初始化器,用于快速初始化属性。你不需要初始化所有的属性,只需要初始化你需要的。
因为编码器不想设置它的值。如果要在末尾添加语句Album = new List()。你不需要设置所有的属性
正如其他人提到的,代码示例使用了对象和集合初始化器。对于集合,初始化器调用集合的构造函数,然后为花括号内列出的每个元素调用. add()函数。对于对象,初始化器调用对象的构造函数,然后为您指定的任何属性设置值。
对象和集合初始化器实际上是在一个临时变量中创建对象或集合,然后将结果赋值给变量。这确保你得到一个全有或全无的结果(即,如果你不能得到一个部分初始化的值,如果你在初始化期间从另一个线程访问它)。初始化代码可以重写如下:
var temp_list = new List<Genre>();
// new genre { Name = "Rock" , Description = "Rock music" }
var temp_genre_1 = new Genre();
temp_genre_1.Name = "Rock";
temp_genre_1.Description = "Rock music";
temp_list.Add(temp_genre_1);
// new genre { Name = "Classic" , Description = "Middle ages music" }
var temp_genre_2 = new Genre();
temp_genre_2.Name = "Classic";
temp_genre_2.Description = "Middle ages music";
temp_list.Add(temp_genre_2);
// set genre to the result of your Collection Initializer
var genre = temp_list;
由于这段代码没有显式地设置类型的Album
属性的值,因此它被设置为在Genre
类中指定的默认值(对于引用类型为空)。