Dela via


Tomma nycklar har lagts till i ordlistan av konfigureringsbindaren

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 de här nycklarna inte längre hoppar över utan istället skapas automatiskt med sina förinställda värden. Den här ändringen säkerställer att alla nycklar som anges i konfigurationen finns i ordlistan.

Version lanserad

Förhandsversion 5 av .NET 8

Tidigare beteende

Tidigare hoppades tomma nycklar i konfigurationen över när de var bundna till en ordbokstyp. Ö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 i föregående beteendeavsnitt, som nu ger följande text som visar att q3 har lagts till i ordboken med sitt standardvärde.

q1: 1
q2: 2
q3: 0

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

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