Udostępnij za pośrednictwem


Puste klucze dodane do słownika przez powiązanie konfiguracji

W poprzednich wersjach, gdy konfiguracja była powiązana z typem słownika, wszystkie klucze bez odpowiednich wartości w konfiguracji zostały pominięte i nie zostały dodane do słownika. Zachowanie zmieniło się tak, że te klucze nie są już pomijane, ale zamiast tego automatycznie tworzone przy użyciu ich wartości domyślnych. Ta zmiana gwarantuje, że wszystkie klucze wymienione w konfiguracji będą obecne w słowniku.

Wprowadzona wersja

.NET 8 (wersja zapoznawcza 5)

Poprzednie zachowanie

Wcześniej puste klucze w konfiguracji zostały pominięte po powiązaniu z typem słownika. Rozważmy następujący ciąg konfiguracji i kod powiązania.

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}");
}

Wcześniej zobaczysz następujące dane wyjściowe (zwróć uwagę, że brakuje klucza q3 ):

q1: 1
q2: 2

Nowe zachowanie

Począwszy od platformy .NET 8, puste klucze konfiguracji są dodawane do słownika z ich wartością domyślną podczas tworzenia powiązania konfiguracji.

Rozważmy kod z poprzedniej sekcji zachowania , który teraz zwraca następujący tekst pokazujący, że q3 został dodany do słownika z jego wartością domyślną:

q1: 1
q2: 2
q3: 0

Typ zmiany powodującej niezgodność

Ta zmiana jest zmianą behawioralną.

Przyczyna wprowadzenia zmiany

Ta żądana przez użytkownika zmiana gwarantuje, że wszystkie klucze wymienione w konfiguracji znajdują się w słowniku. Posiadanie wszystkich obecnych kluczy usprawnia proces i pozwala uniknąć potencjalnych problemów z brakującymi kluczami.

Sprawdź i dostosuj logikę aplikacji, aby uwzględnić obecność nowo utworzonych wpisów słownika z pustymi wartościami. Jeśli nowe zachowanie jest niepożądane, usuń wpisy wartości pustej z konfiguracji. Eliminując te wpisy, podczas procesu powiązania nie zostaną dodane żadne wpisy słownika z pustymi wartościami.

Dotyczy interfejsów API