C# 对象 & 集合初始化器
最后修改于 2023 年 7 月 5 日
C# 对象 & 集合初始化器教程展示了如何使用初始化器来初始化对象和集合。
使用对象初始化器,我们可以在创建对象时为对象的任何可访问字段或属性赋值,而无需调用构造函数,然后编写赋值语句。(我们不能在记录上使用对象初始化器。)
C# 对象初始化器
在以下示例中,我们使用对象初始化器。
Program.cs
var u1 = new User { FirstName = "John", LastName = "Doe", Occupation = "gardener" };
var u2 = new User { LastName = "Roe", Occupation = "driver", FirstName = "Roger" };
Console.WriteLine(u1);
Console.WriteLine(u2);
class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Occupation { get; set; }
public override string ToString()
{
return $"User {FirstName} {LastName} {Occupation}";
}
}
我们使用对象初始化器语法创建了两个用户。
var u1 = new User { FirstName = "John", LastName = "Doe", Occupation = "gardener" };
我们使用一对 {} 括号;字段之间用逗号字符分隔。
var u2 = new User { LastName = "Roe", Occupation = "driver", FirstName = "Roger" };
字段的顺序无关紧要。
$ dotnet run User John Doe gardener User Roger Roe driver
C# 带有匿名类型的对象初始化器
我们可以使用对象初始化器创建匿名类型;这在 LINQ 表达式中很有用。
Program.cs
var u1 = new { FirstName = "John", LastName = "Doe", Occupation = "gardener" };
var u2 = new { FirstName = "Roger", LastName = "Roe", Occupation = "driver" };
Console.WriteLine(u1);
Console.WriteLine(u2);
该示例创建了两个用户。
$ dotnet run
{ FirstName = John, LastName = Doe, Occupation = gardener }
{ FirstName = Roger, LastName = Roe, Occupation = driver }
在下一个示例中,我们在 LINQ 查询表达式中使用匿名类型。
Program.cs
var users = new List<User>
{
new (1, "John", "Doe", "London", "gardener", "2001-04-01", 860),
new (2, "Lenny", "Ferguson", "New York", "programmer", "1997-12-11", 980),
new (3, "Andrew", "Ramos", "Boston", "shop keeper", "1987-02-22", 600),
new (4, "Peter", "Stastny", "Prague", "retired", "1936-03-24", 500),
new (5, "Anna", "Fabry", "Bratislava", "accountant", "1973-11-18", 780),
new (6, "Albert", "Markovic", "Bratislava", "lawyer", "1940-12-11", 1250),
new (7, "Adam", "Palffy", "Trnava", "policeman", "1983-12-01", 890),
new (8, "Robert", "Palkovic", "Bratislava", "veterinary", "1965-05-15", 990),
};
var data = from user in users
select new { user.FirstName, user.LastName, user.Salary };
foreach (var u in data)
{
Console.WriteLine(u);
}
record User(int Id, string FirstName, string LastName, string City,
string Occupation, string DateOfBirth, decimal Salary);
我们有一个用户列表,其中每个用户都有七个属性。在 LINQ 查询表达式中,我们生成一个匿名类型列表,其中每个项目只有属性的子集。
$ dotnet run
{ FirstName = John, LastName = Doe, Salary = 860 }
{ FirstName = Lenny, LastName = Ferguson, Salary = 980 }
{ FirstName = Andrew, LastName = Ramos, Salary = 600 }
{ FirstName = Peter, LastName = Stastny, Salary = 500 }
{ FirstName = Anna, LastName = Fabry, Salary = 780 }
{ FirstName = Albert, LastName = Markovic, Salary = 1250 }
{ FirstName = Adam, LastName = Palffy, Salary = 890 }
{ FirstName = Robert, LastName = Palkovic, Salary = 990 }
C# 列表初始化器
在以下示例中,我们使用列表初始化器。
Program.cs
var vals = new List<int> { 1, -2, -1, 0, 2, 4, 3, -5 };
var positive = from val in vals
where val > 0
select val;
Console.WriteLine(string.Join(" ", positive));
我们有一个整数列表。我们在列表上应用一个查询表达式。
var vals = new List<int> { 1, -2, -1, 0, 2, 4, 3, -5 };
列表集合一次性初始化;所有元素都在一对 {} 括号内指定。
$ dotnet run 1 2 4 3
在下一个示例中,我们将列表初始化器与 User 类型一起使用。
Program.cs
var users = new List<User>
{
new User {FirstName="John", LastName="Doe", Occupation="gardener"},
new User {FirstName="Roger", LastName="Roe", Occupation="driver"},
};
foreach (var user in users)
{
Console.WriteLine(user);
}
class User
{
public string FirstName { get; init; }
public string LastName { get; init; }
public string Occupation { get; init; }
public override string ToString()
{
return $"User {FirstName} {LastName} {Occupation}";
}
}
在此示例中,我们使用列表初始化器语法创建一个用户列表。
$ dotnet run User John Doe gardener User Roger Roe driver
C# 字典初始化器
字典初始化器可以用两种方式指定。
Program.cs
var domains = new Dictionary<string, string>
{
{"sk", "Slovakia"},
{"ru", "Russia"},
{"de", "Germany"},
{"no", "Norway"}
};
Console.WriteLine(domains["sk"]);
var days = new Dictionary<string, string>
{
["mo"] = "Monday",
["tu"] = "Tuesday",
["we"] = "Wednesday",
["th"] = "Thursday",
["fr"] = "Friday",
["sa"] = "Saturday",
["su"] = "Sunday"
};
Console.WriteLine(days["fr"]);
该示例创建了两个字典。
var domains = new Dictionary<string, string>
{
{"sk", "Slovakia"},
{"ru", "Russia"},
{"de", "Germany"},
{"no", "Norway"}
};
创建了一个新字典。在尖括号 <> 之间,我们指定键和值的数据类型。新的键/值元素对写在嵌套的 {} 括号内;每对之间用逗号字符分隔。 例如, "sk" 键指向 "Slovakia" 值。
Console.WriteLine(domains["sk"]);
要获取一个值,我们指定字典名称,后跟方括号 []。在方括号之间,我们指定键名。
var days = new Dictionary<string, string>
{
["mo"] = "Monday",
["tu"] = "Tuesday",
["we"] = "Wednesday",
["th"] = "Thursday",
["fr"] = "Friday",
["sa"] = "Saturday",
["su"] = "Sunday"
};
这是一种替代语法;使用字典访问表示法将值分配给键。
$ dotnet run Slovakia Friday
来源
在本文中,我们使用了 C# 中的对象 & 集合初始化器。
作者
列出所有 C# 教程。