valuetype number c#

number - value types in c#



Diferencias entre default(int) vs int=0 (5)

Alguien sabe si existe alguna diferencia entre declarar una variable entera usando:

var i = default(int)

vs

var i = 0;

Tal vez una pequeña diferencia de rendimiento u otras diferencias?

¡Gracias a todos!


Aquí está el IL para el código var i = default(int) :

IL_0001: ldc.i4.0 IL_0002: stloc.0 // i

Aquí está la IL para la var i = 0; código:

IL_0001: ldc.i4.0 IL_0002: stloc.0 // i

Parece que se reduce a las preferencias personales.


Efectivamente, no hay diferencia. Segun MSDN

Especifica el valor por defecto del parámetro de tipo. Esto será nulo para los tipos de referencia y cero para los tipos de valor.

int es un tipo de valor, por lo que la expresión se resolverá en 0.

Me gustaría realizar la asignación explícita 0 ya que es mucho más legible.


En términos de funcionalidad, no, no hay diferencia ya que 0 es el valor predeterminado para el tipo int .

En términos de rendimiento, estoy bastante seguro de que el default(int) se reemplaza por 0 durante el tiempo de compilación, por lo que el único impacto leve de rendimiento puede ocurrir durante el tiempo de compilación, pero no el tiempo de ejecución.


No hay diferencia entre los dos.
En C # hay facilidades para diferentes situaciones. Esto no implica su uso en todas las situaciones, independientemente de la razón lógica detrás de esto.
Por ejemplo, el valor predeterminado es el más común en los genéricos, ya que en Clases y métodos genéricos, uno de los problemas que surgen es cómo asignar un valor predeterminado a un tipo parametrizado T cuando no sabe lo siguiente de antemano.
Aunque puede usarlo con tipos primitivos como int, pero no se le sugiere que lo haga, toda su razón de existencia es otra cosa.
Usa el último ya que es más legible y lógico.
También es posible que desee ver este enlace en forma predeterminada


Otro factor podría ser en el futuro si la definición (predeterminada) se ha cambiado en el compilador, entonces su proyecto podría fallar.