Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una expresión de valor predeterminada genera el valor predeterminado de un tipo. Hay dos tipos de expresiones de valor predeterminadas: la llamada de operador predeterminada y un literal predeterminado.
También se usa la default palabra clave como etiqueta de mayúsculas y minúsculas predeterminada dentro de una switch instrucción .
operador predeterminado
El argumento del operador default debe ser el nombre de un tipo o un parámetro de tipo, como se muestra en el ejemplo siguiente:
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.
literal predeterminado
Puede usar el default literal para generar el valor predeterminado de un tipo cuando el compilador puede deducir el tipo de expresión. La default expresión literal genera el mismo valor que la default(T) expresión donde T es el tipo inferido. Puede usar el default literal en cualquiera de los casos siguientes:
- En la asignación o inicialización de una variable.
- En la declaración del valor predeterminado para un parámetro de método opcional.
- En una llamada al método para proporcionar un valor de argumento.
- En una
returninstrucción o como expresión en un miembro con forma de expresión.
En el ejemplo siguiente se muestra el uso del 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) ]
Sugerencia
Use la regla de estilo de .NET IDE0034 para especificar una preferencia sobre el uso del literal en el default código base.
Especificación del lenguaje C#
Para obtener más información, consulte la sección Expresiones de valor predeterminadas de la especificación del lenguaje C#.