Valores padrão de tipos C# (referência de C#)
A seguinte tabela mostra os valores padrão de tipos C#:
Type | Valor padrão |
---|---|
Qualquer tipo de referência | null |
Qualquer tipo numérico integral interno | 0 (zero) |
Qualquer tipo numérico de ponto flutuante interno | 0 (zero) |
bool | false |
char | '\0' (U+0000) |
enumeração | O valor é produzido pela expressão (E)0 , em que E é o identificador de enumeração. |
struct | O valor produzido pela configuração de todos os campos tipo-valor para seus valores padrão e todos os campos tipo-referência para null . |
Qualquer tipo de valor que permite valor nulo | Uma instância para a qual a propriedade HasValue é false e a propriedade Value não está definida. Esse valor padrão também é conhecido como o valor null do tipo de valor que permite valor nulo. |
Expressões de valor padrão
Use o operador default
para produzir o valor padrão de um tipo, como mostra o seguinte exemplo:
int a = default(int);
Você pode usar o default
literal para inicializar uma variável com o valor padrão de seu tipo:
int a = default;
Construtor sem parâmetros de um tipo de valor
Para um tipo de valor, o construtor implícito sem parâmetros também produz o valor padrão do tipo, como mostra o seguinte exemplo:
var n = new System.Numerics.Complex();
Console.WriteLine(n); // output: (0, 0)
Em tempo de execução, se a instância de System.Type representar um tipo de valor, você poderá usar o método Activator.CreateInstance(Type) para invocar o construtor sem parâmetros a fim de obter o valor padrão do tipo.
Observação
Em C# 10 e versões posteriores, um tipo de estrutura (que é um tipo de valor) pode ter um construtor explícito sem parâmetros que pode produzir um valor não padrão do tipo. Portanto, recomendamos usar o operador default
ou o literal default
para produzir o valor padrão de um tipo.
Especificação da linguagem C#
Para obter mais informações, confira as seguintes seções da especificação da linguagem C#:
- Valores padrão
- Construtores padrão
- C# 10 - Constructos de struct sem parâmetros
- C# 11 - Structs de padrão automático