¿Cuál es el valor predeterminado de un miembro en una matriz?


Instancio una matriz como esta:

int array[] = new int[4];

¿Cuáles son los valores predeterminados para esos cuatro miembros? Es null, 0 o no existe?

Author: Peter Mortensen, 2013-03-08

4 answers

Es 0. No puede ser null, ya que null no es un valor int válido.

De la sección 7.6.10.4 de la especificación C# 5:

Todos los elementos de la nueva instancia de matriz se inicializan a sus valores predeterminados (§5.2).

Y de la sección 5.2:

El valor predeterminado de una variable depende del tipo de la variable y se determina de la siguiente manera:

  • Para una variable de tipo valor, el valor predeterminado es el mismo que el valor calculado por el constructor por defecto del valor-tipo (§4.1.2).
  • Para una variable de tipo referencia, el valor predeterminado es null.

La inicialización a valores predeterminados se realiza típicamente haciendo que el administrador de memoria o recolector de basura inicialice la memoria a todos los bits cero antes de que se asigne para su uso. Por esta razón, es conveniente usar todos-bits-cero para representar la referencia nula.

(Como detalle de implementación, hay algunos trucos alrededor de la primera bala punto. Aunque C # no le permite declarar un constructor sin parámetros para tipos de valor, puede crear sus propios constructores sin parámetros para tipos de valor en IL. No creo que esos constructores sean llamados en la inicialización del array, pero serán llamados en una expresión new X() en C#. Sin embargo, está fuera del ámbito de la especificación de C#, en realidad.)

 45
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-08 17:49:24

El valor predeterminado de una variable inicializada automáticamente de tipo T, como un elemento de matriz o un campo de instancia, es el mismo que el valor de default(T). Para tipos de referencia y tipos de puntero, es null. Para los tipos numéricos, es el cero de ese tipo. Para Bool, es falso. Para los tipos de estructura, es el valor de estructura que tiene todos sus campos inicializados a sus valores predeterminados.

 12
Author: Eric Lippert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-08 17:45:18

Desde Matrices (Guía de Programación en C# ):

El valor predeterminado de los elementos de matriz numérica se establece en cero, y los elementos de referencia se establecen en null.

 4
Author: Douglas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-13 12:33:09

Los enteros no pueden ser NULL. Tendrán el valor '0'. Incluso si intenta asignar NULL a un int de código no podrá hacerlo.

 0
Author: Ron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-07 14:06:48