PROGRAM.CS:
Units
appSettings.json:
var builder = Host.CreateApplicationBuilder(args);
var units = builder.Configuration.GetSection("Units").Get<Unit[]>();
foreach (var unit in units)
{
foreach (var item in unit.Paths)
{
Console.WriteLine(item);
}
}
public record Unit(string Name, string[] Paths);
appsettings.development.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"Units": [
{
"name": "test1",
"paths": [
"p1",
"p2",
"p3"
]
},
{
"name": "test2",
"paths": [
"p4",
"p5",
"p6"
]
}
]
}
当我运行项目时,我希望输出是:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}
,但是,实际输出为:
p1
p2
p3
p4
p5
p6
问题:为什么我会得到重复的值?有人以前遇到过这种行为,可以阐明引起的行为吗?
任何洞察力都将不胜感激!
问题是使用没有无参数构造函数的
p1
p2
p3
p1
p2
p3
p4
p5
p6
p4
p5
p6
,也具有属性。
您可以通过正常类来复制这一点:
record
如果您删除构造函数,则不会获得重复的值。
应该在某个地方记录这一点,但具有约束力的行为似乎是:首先使用构造函数
然后仍然填充具有值的属性