C#对象和集合初始化器教程展示了如何使用初始化器初始化对象和集合。
使用对象初始值设定项,我们可以在创建时为对象的任何可访问字段或属性赋值,而无需调用构造函数和随后的赋值语句行。(我们不能在记录上使用对象初始值设定项。)
C#对象初始化器
在下面的例子中,我们使用了一个对象初始化器。
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表达式中很有用。
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查询表达式中使用匿名类型。
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#列表初始化器
在下面的例子中,我们使用了一个列表初始化器。
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的列表初始值设定项。
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#字典初始化器
可以通过两种方式指定字典初始值设定项。
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#教程。
