Dela via


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.

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.

Berörda API:er