对象和集合初始化器
在创建对象时简洁地设置属性。
对象和集合初始化器 是 CoddyKit 上的免费 C# Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
什么是对象初始化器
对象初始化器会在 new 之后、{ } 内直接设置公共属性或字段,无需为每种组合分别编写构造函数。
using System;
class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main()
{
var p = new Person { Name = "Ada", Age = 36 };
Console.WriteLine(p.Name + ", " + p.Age);
}
}初始化器语法
在大括号内列出属性赋值,并用逗号分隔。它们会在构造函数完成后运行。
using System;
class Car
{
public string Make { get; set; }
public string Model { get; set; }
public int Year { get; set; }
}
class Program
{
static void Main()
{
var car = new Car
{
Make = "Toyota",
Model = "Corolla",
Year = 2022
};
Console.WriteLine(car.Year + " " + car.Make + " " + car.Model);
}
}结合使用构造函数和初始化器
您可以调用构造函数并且使用初始化器。构造函数先运行,然后初始化器再为列出的属性赋值。
using System;
class Widget
{
public string Id { get; }
public string Label { get; set; }
public Widget(string id) { Id = id; }
}
class Program
{
static void Main()
{
var w = new Widget("w1") { Label = "Submit" };
Console.WriteLine(w.Id + ": " + w.Label);
}
}只初始化部分属性
您只需列出所关注的属性,其余属性保留默认值。这使初始化器更加灵活。
using System;
class Settings
{
public bool DarkMode { get; set; } = false;
public int Volume { get; set; } = 50;
public string Lang { get; set; } = "en";
}
class Program
{
static void Main()
{
var s = new Settings { DarkMode = true };
Console.WriteLine(s.DarkMode + ", " + s.Volume + ", " + s.Lang);
}
}集合初始化器
集合初始化器使用带逗号分隔元素的 { },在创建列表、集合或数组时填充它们。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var nums = new List<int> { 1, 2, 3, 4, 5 };
Console.WriteLine("Count: " + nums.Count);
Console.WriteLine("Sum: " + Sum(nums));
}
static int Sum(List<int> list)
{
int t = 0;
foreach (var n in list) t += n;
return t;
}
}集合初始化器的工作方式
编译器会将每个元素转换为一次 Add(...) 调用。任何具有 Add 方法和 IEnumerable 的类型都支持此语法。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var names = new List<string> { "Ann", "Bob", "Cara" };
foreach (var n in names)
Console.WriteLine(n);
}
}字典初始化器
字典可以在大括号中使用键值对进行初始化,这对于查找表非常方便。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var ages = new Dictionary<string, int>
{
["Ann"] = 30,
["Bob"] = 25
};
Console.WriteLine("Ann is " + ages["Ann"]);
}
}嵌套对象初始化器
对象初始化器可以初始化嵌套对象,在一个表达式中构建一个小型对象图。
using System;
class Address
{
public string City { get; set; }
}
class Customer
{
public string Name { get; set; }
public Address Home { get; set; } = new Address();
}
class Program
{
static void Main()
{
var c = new Customer
{
Name = "Lin",
Home = new Address { City = "Tokyo" }
};
Console.WriteLine(c.Name + " in " + c.Home.City);
}
}对象集合
您可以结合这两项功能:初始化一个列表,而列表中的元素本身也使用对象初始化器构建。
using System;
using System.Collections.Generic;
class Item
{
public string Name { get; set; }
public decimal Price { get; set; }
}
class Program
{
static void Main()
{
var cart = new List<Item>
{
new Item { Name = "Pen", Price = 1.5m },
new Item { Name = "Book", Price = 9.0m }
};
decimal total = 0;
foreach (var i in cart) total += i.Price;
Console.WriteLine("Total: " + total);
}
}初始化器与 init 属性
对象初始化器是设置仅限 init 属性的方式,因为这些属性只能在初始化期间赋值。
using System;
class Config
{
public string Env { get; init; }
public int Retries { get; init; }
}
class Program
{
static void Main()
{
var c = new Config { Env = "prod", Retries = 3 };
Console.WriteLine(c.Env + " / " + c.Retries);
}
}综合运用
初始化器让构造过程更具声明性且更易读,尤其适用于配置对象和测试数据。
using System;
using System.Collections.Generic;
class Team
{
public string Name { get; set; }
public List<string> Members { get; set; } = new List<string>();
}
class Program
{
static void Main()
{
var t = new Team
{
Name = "Alpha",
Members = { "Ann", "Bob", "Cara" }
};
Console.WriteLine(t.Name + " has " + t.Members.Count + " members");
}
}快速检查
请检验您对初始化器的理解。
回顾
对象初始化器会在 new 之后、构造函数运行完毕后,在 { } 中设置公共成员。集合初始化器通过隐式的 Add 调用添加元素,字典则支持键值对。两者都可以嵌套,也都适用于 init 属性,并且能让构造过程简洁而具有声明性。
using System;
using System.Collections.Generic;
class Demo
{
public string Name { get; set; }
public List<int> Nums { get; set; } = new List<int>();
}
class Program
{
static void Main()
{
var d = new Demo { Name = "x", Nums = { 1, 2, 3 } };
Console.WriteLine(d.Name + " " + d.Nums.Count);
}
}用 AI 导师学习 C# — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 93
- 课程
- 346
常见问题解答
「对象和集合初始化器」课时是免费的吗?
是的 — 「对象和集合初始化器」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「对象和集合初始化器」这节课中我会学到什么?
在创建对象时简洁地设置属性。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「对象和集合初始化器」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 定义构造函数
- 使用 this 链接构造函数
- 对象和集合初始化器
- 静态构造函数