Какой из них лучше использовать?
int xyz = 0;
ИЛИ
int xyz= default(int)
;
Какой из них лучше использовать?
int xyz = 0;
ИЛИ
int xyz= default(int)
;
int xyz = 0;
Почему люди думают больше, чем необходимо? default
полезен с общим кодом, но здесь он ничего не добавляет. Вы также должны думать, если вы инициализируете его в нужном месте, имея значимую ценность. Иногда вы видите, с переменными стека, код вроде:
int xyz = 0;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
В таких случаях вы должны отложить инициализацию до тех пор, пока не получите реальное значение. У:
int xyz;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
Компилятор гарантирует, что вы не используете неинициализированную переменную стека. В некоторых случаях вы должны использовать бессмысленные значения, потому что компилятор не может знать, что код никогда не будет выполняться (из-за исключения, вызова Exit и т.д.). Это исключение (без каламбура) для правила.
Это зависит от того, чего вы хотите достичь.
Я бы предпочел
int xyz = 0;
поскольку я считаю, что это более читаемо и не путать.
default ключевое слово в основном подходит для Generics.
Цель оператора 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
.
нет разницы в производительности между вашими кодами. чтобы ясно видеть использование int xyz = 0;
Учитывая, что испущенный CIL идентичен (вы получаете
IL_0001: ldc.i4.0
IL_0002: stloc.0
в обоих случаях), правило состоит в том, чтобы выбрать тот, который, по вашему мнению, лучше связывает цель кода. Обычно вопросы чувств субъективны и трудно решаются; в этом случае, однако, был ли я обозревателем кода, мне пришлось бы представить убедительную причину чрезвычайно, чтобы принять то, что выглядит на первый взгляд, как совершенно ненужное использование default()
.
int xyz = default (int); Мне нравится этот способ, когда вы работаете с Generics bcoz, это дает вам гибкость, чтобы получить по умолчанию любой тип, с которым вы работаете.
int xyz = 0; С другой стороны, это легко и быстро и, очевидно, не будет работать в общих случаях.
Оба имеют свои плюсы и минусы.
Привет,
int xyz = 0 является более понятным, defaut обычно используется с generics
лучшее
int xyz;
потому что вы не можете получить доступ к неинициализированной переменной.