对象初始化器
Object initializers let you assign values to any accessible fields or properties of an object at creation time without having to invoke a constructor followed by lines of assignment statements.
通过对象初始化器,可以在创建对象的同时为对象的属性赋值,而无需显式的调用对象的构造方法或属性设置方法。
适用于所有具有公共可写属性的类。这意味着,只要属性的可访问性为公共(public),并且具有可写(set)的访问器,就可以使用对象初始化器来初始化该类的对象。
示例:
语法格式
TypeName objectName = new TypeName
{
Property1 = value1,
Property2 = value2,
// 可以继续为对象的其他属性赋值
};
同时使用构造函数和初始化器来初始化一个对象时,初始化器会在构造函数完成后执行,可以为对象的属性提供额外的设置。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Person(string name)
{
Name = name;
}
}
// 使用构造函数和初始化器创建 Person 对象
Person person = new Person("Alice")
{
Age = 30
};
具有匿名类型的对象初始化器
// 使用匿名类型的对象初始化器创建对象并初始化属性
var person = new
{
Name = "Alice",
Age = 30
};
集合初始化器
Collection initializers let you specify one or more element initializers when you initialize a collection type that implements IEnumerable and has Add with the appropriate signature as an instance method or an extension method. The element initializers can be a simple value, an expression, or an object initializer. By using a collection initializer, you do not have to specify multiple calls; the compiler adds the calls automatically.
用于初始化实现了 IEnumerable 接口并具有符合适当签名的 Add 方法(作为实例方法或扩展方法)的集合类型
可以指定一个或多个元素初始化器。元素初始化器可以是一个简单值、一个表达式或一个对象初始化器。
通过使用集合初始化器,您无需指定多个调用;编译器会自动添加这些调用。
示例:
初始化列表与字典
//初始化列表
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
//初始化字典
Dictionary<string, int> dictionary = new Dictionary<string, int>
{
{ "one", 1 },
{ "two", 2 },
{ "three", 3 }
};
在集合初始化器中调用对象初始化器
List<Cat> cats = new List<Cat>
{
new Cat{ Name = "Sylvester", Age=8 },
new Cat{ Name = "Whiskers", Age=2 },
new Cat{ Name = "Sasha", Age=14 }
};
如果Add方法允许,元素初始化器可以为null
List<Cat?> moreCats = new List<Cat?>
{
new Cat{ Name = "Furrytail", Age=5 },
new Cat{ Name = "Peaches", Age=4 },
null
};