Partilhar via


Teclas vazias adicionadas ao dicionário pelo fichário de configuração

Nas versões anteriores, quando a configuração era vinculada a um tipo de dicionário, todas as chaves sem valores correspondentes na configuração eram ignoradas e não eram adicionadas ao dicionário. O comportamento foi alterado de tal forma que essas chaves não são mais ignoradas, mas criadas automaticamente com seus valores padrão. Essa alteração garante que todas as chaves listadas na configuração estarão presentes no dicionário.

Versão introduzida

.NET 8 Visualização 5

Comportamento anterior

Anteriormente, as teclas vazias na configuração eram ignoradas quando vinculadas a um tipo de dicionário. Considere a seguinte cadeia de caracteres de configuração e código de ligação.

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

Anteriormente, você veria a seguinte saída (observe que a chave q3 está faltando):

q1: 1
q2: 2

Novo comportamento

A partir do .NET 8, chaves de configuração vazias são adicionadas ao dicionário com seu valor padrão durante a vinculação de configuração.

Considere o código da seção de comportamento anterior, que agora gera o seguinte texto mostrando que q3 foi adicionado ao dicionário com seu valor padrão:

q1: 1
q2: 2
q3: 0

Tipo de mudança de rutura

Esta mudança é uma mudança comportamental.

Razão para a alteração

Essa alteração solicitada pelo usuário garante que todas as chaves listadas na configuração estejam presentes no dicionário. Ter todas as chaves presentes agiliza o processo e evita possíveis problemas com chaves ausentes.

Verifique e adapte a lógica do aplicativo para acomodar a presença das entradas de dicionário recém-criadas com valores vazios. Se o novo comportamento for indesejável, remova as entradas de valor vazio da configuração. Ao eliminar essas entradas, nenhuma entrada de dicionário com valores vazios será adicionada durante o processo de vinculação.

APIs afetadas