Какой из них лучше использовать и почему в С#

Какой из них лучше использовать?

int xyz = 0;

ИЛИ

int xyz= default(int);

Ответ 1

int xyz = 0;

Почему люди думают больше, чем необходимо? default полезен с общим кодом, но здесь он ничего не добавляет. Вы также должны думать, если вы инициализируете его в нужном месте, имея значимую ценность. Иногда вы видите, с переменными стека, код вроде:

int xyz = 0;

if(someCondition)
{
  // ...
  xyz = 1;
  // ...
}
else
{
  // ...
  xyz = 2;
  // ...
}

В таких случаях вы должны отложить инициализацию до тех пор, пока не получите реальное значение. У:

int xyz;

if(someCondition)
{
  // ...
  xyz = 1;
  // ...
}
else
{
  // ...
  xyz = 2;
  // ...
}

Компилятор гарантирует, что вы не используете неинициализированную переменную стека. В некоторых случаях вы должны использовать бессмысленные значения, потому что компилятор не может знать, что код никогда не будет выполняться (из-за исключения, вызова Exit и т.д.). Это исключение (без каламбура) для правила.

Ответ 2

Это зависит от того, чего вы хотите достичь.

Я бы предпочел

int xyz = 0;

поскольку я считаю, что это более читаемо и не путать.

default ключевое слово в основном подходит для Generics.

Ответ 3

Цель оператора default - предоставить вам значение по умолчанию для типа, но оно было добавлено в первую очередь, чтобы позволить generics иметь допустимое значение для значений, объявленных его аргументами общего типа.

У меня нет веских доказательств, но я подозреваю, что компилятор выпустит тот же код для обоих в вашем конкретном случае.

Однако здесь существует законное использование default:

public T Aggregate<T>(IEnumerable<T> collection, Func<T, T, T> aggregation)
{
    T result = default(T);

    foreach (T element in collection)
        result = aggregation(result, element);

    return result;
}

Без default, для выполнения компиляции и правильной работы для вышеуказанного кода потребуются некоторые хаки.

Итак, используйте первый, установите его на 0.

Ответ 4

нет разницы в производительности между вашими кодами. чтобы ясно видеть использование int xyz = 0;

Ответ 5

Учитывая, что испущенный CIL идентичен (вы получаете

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

в обоих случаях), правило состоит в том, чтобы выбрать тот, который, по вашему мнению, лучше связывает цель кода. Обычно вопросы чувств субъективны и трудно решаются; в этом случае, однако, был ли я обозревателем кода, мне пришлось бы представить убедительную причину чрезвычайно, чтобы принять то, что выглядит на первый взгляд, как совершенно ненужное использование default().

Ответ 6

int xyz = default (int); Мне нравится этот способ, когда вы работаете с Generics bcoz, это дает вам гибкость, чтобы получить по умолчанию любой тип, с которым вы работаете.

int xyz = 0; С другой стороны, это легко и быстро и, очевидно, не будет работать в общих случаях.

Оба имеют свои плюсы и минусы.

Привет,

Ответ 7

int xyz = 0 является более понятным, defaut обычно используется с generics

Ответ 8

лучшее

int xyz;

потому что вы не можете получить доступ к неинициализированной переменной.