Tomma nycklar har lagts till i ordlistan efter konfigurationsbindning
I tidigare versioner, när konfigurationen var bunden till en ordlistetyp, hoppades alla nycklar utan motsvarande värden i konfigurationen över och lades inte till i ordlistan. Beteendet har ändrats så att dessa nycklar inte längre hoppas över utan skapas automatiskt med sina standardvärden. Den här ändringen säkerställer att alla nycklar som anges i konfigurationen finns i ordlistan.
Version introducerad
Förhandsversion 5 av .NET 8
Tidigare beteende
Tidigare hoppades tomma nycklar i konfigurationen över när de var bundna till en ordlistetyp. Överväg följande konfigurationssträng och bindningskod.
var json = @"{
""Queues"": {
""q1"": {
""V"": 1
},
""q2"": {
""V"": 2
},
""q3"": {
}
}
}";
public class Q
{
public Dictionary<string, QueueValue> Queues { get; set; } = new();
}
public class QueueValue
{
public int V { get; set; }
}
var configuration = new ConfigurationBuilder()
.AddJsonStream(StringToStream(json))
.Build();
Q options = new Q();
configuration.Bind(options);
foreach (var kvp in options.Queues)
{
Console.WriteLine($"{kvp.Key}: {kvp.Value.V}");
}
Tidigare såg du följande utdata (observera att nyckeln q3
saknas):
q1: 1
q2: 2
Nytt beteende
Från och med .NET 8 läggs tomma konfigurationsnycklar till i ordlistan med standardvärdet under konfigurationsbindningen.
Överväg koden från föregående beteendeavsnitt , som nu visar följande text som q3
har lagts till i ordlistan med dess standardvärde:
q1: 1
q2: 2
q3: 0
Typ av icke-bakåtkompatibel ändring
Den här ändringen är en beteendeförändring.
Orsak till ändringen
Den här användarbegärande ändringen säkerställer att alla nycklar som anges i konfigurationen finns i ordlistan. Att ha alla nycklar närvarande effektiviserar processen och undviker potentiella problem med saknade nycklar.
Rekommenderad åtgärd
Verifiera och anpassa programlogik för att hantera förekomsten av de nyligen skapade ordlisteposterna med tomma värden. Om det nya beteendet inte är önskvärt tar du bort poster med tomt värde från konfigurationen. Genom att eliminera dessa poster läggs inga ordlisteposter med tomma värden till under bindningsprocessen.