Различия между default (int) vs int = 0

кто-нибудь знает, существует ли какая-либо разница между объявлением целочисленной переменной, используя:

var i = default(int)

против

var i = 0;

Может быть, небольшое различие в производительности или другие отличия?

Спасибо всем!

Ответы

Ответ 1

Эффективно, нет никакой разницы. Согласно MSDN

Указывает значение по умолчанию для параметра типа. Это будет null для ссылочных типов и нуля для типов значений.

int - тип значения, поэтому выражение будет равно 0.

Я бы выполнил явное назначение 0, так как его намного читаем.

Ответ 2

Здесь IL для кода var i = default(int):

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

Здесь IL для кода var i = 0;:

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

Похоже, это сводится к личным предпочтениям.

Ответ 3

В терминах функциональности нет, нет разницы, поскольку 0 является значением по умолчанию для типа int.

Что касается производительности, я уверен, что во время компиляции default(int) заменяется на 0, поэтому только во время компиляции может произойти только небольшое поражение производительности, но не время выполнения.

Ответ 4

Между ними нет разницы.
В С# имеются средства для различных ситуаций. Это не подразумевает использование их во всех ситуациях, независимо от их логической причины. Например, значение по умолчанию наиболее распространено в generics, так как в родовых классах и методах возникает одна проблема: как назначить значение по умолчанию параметризованному типу T, если вы не знаете следующее заранее. Хотя вы можете использовать его с примитивными типами, такими как int, но вы не предлагаете этого, вся его причина существования - это что-то другое.
Используйте более поздний, поскольку он более читабельен и логичен. Вы также можете увидеть эту ссылку по умолчанию

Ответ 5

Еще один фактор может быть в будущем, если (определение по умолчанию) в компиляторе было изменено, тогда ваш проект может сломаться.

Ответ 6

Вы должны использовать значение по умолчанию (int) для лучшей читаемости кода. С var я = 0; вы не знаете, является ли это значением по умолчанию или жестко закодированным кодом, имеющим бизнес-смысл.