Compartilhar via


Expressões de valor padrão

Uma expressão de valor padrão produz o valor padrão de um tipo. Existem dois tipos de expressões de valor padrão: a chamada do default operador e um default literal.

Você também usa a default palavra-chave como o rótulo de caso padrão em uma switch instrução.

A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.

A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.

Dica

Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.

Operador default

O argumento do operador default deve ser o nome de um tipo ou um parâmetro de tipo, como mostra o exemplo a seguir:

Console.WriteLine(default(int));  // output: 0
Console.WriteLine(default(object) is null);  // output: True

void DisplayDefaultOf<T>()
{
    var val = default(T);
    Console.WriteLine($"Default value of {typeof(T)} is {(val == null ? "null" : val.ToString())}.");
}

DisplayDefaultOf<int?>();
DisplayDefaultOf<System.Numerics.Complex>();
DisplayDefaultOf<System.Collections.Generic.List<int>>();
// Output:
// Default value of System.Nullable`1[System.Int32] is null.
// Default value of System.Numerics.Complex is (0, 0).
// Default value of System.Collections.Generic.List`1[System.Int32] is null.

default Literal

Você pode usar o default literal para produzir o valor padrão de um tipo quando o compilador pode inferir o tipo de expressão. A default expressão literal produz o mesmo valor que a default(T) expressão em que T está o tipo inferido. Você pode usar o default literal em qualquer um dos seguintes casos:

O exemplo a seguir mostra o uso do default literal:

T[] InitializeArray<T>(int length, T initialValue = default)
{
    if (length < 0)
    {
        throw new ArgumentOutOfRangeException(nameof(length), "Array length must be nonnegative.");
    }

    var array = new T[length];
    for (var i = 0; i < length; i++)
    {
        array[i] = initialValue;
    }
    return array;
}

void Display<T>(T[] values) => Console.WriteLine($"[ {string.Join(", ", values)} ]");

Display(InitializeArray<int>(3));  // output: [ 0, 0, 0 ]
Display(InitializeArray<bool>(4, default));  // output: [ False, False, False, False ]

System.Numerics.Complex fillValue = default;
Display(InitializeArray(3, fillValue));  // output: [ (0, 0), (0, 0), (0, 0) ]

Dica

Use a regra de estilo do .NET IDE0034 para especificar uma preferência sobre o uso do default literal em sua base de código.

Especificação da linguagem C#

Para obter mais informações, consulte a seção Expressões de valor padrão da especificação da linguagem C#.

Consulte também