@skosterin88

Использовать var или объявлять тип явно?

Недавно установил Resharper. Обратил внимание, что он подчеркивает пунктиром объявления переменных, где их тип указан явно и рекомендует вместо этого использовать var. То есть он хочет, чтобы вместо
double d = 5.0;
MyObject myObj = new MyObject();


было

var d = 5.0;
var myObj = new MyObject();


Лично я всегда полагал, что встроенные типы должны объявляться явно, т.е. переменная типа double должна объявляться именно через double. А вот экземпляры классов можно и через var объявлять. Но Resharper, видимо, думает иначе, и это меня смущает.
А как, по-вашему, правильнее?
  • Вопрос задан
  • 4643 просмотра
Пригласить эксперта
Ответы на вопрос 5
@kvasek
Без разницы.

Локальная переменная с неявным типом имеет строгую типизацию, как если бы тип был задан явно, только тип определяет компилятор.
https://msdn.microsoft.com/uk-ua/library/bb383973.aspx
Ответ написан
Комментировать
@dmitryKovalskiy
программист средней руки
Без разницы.
На мой взгляд описание -
var variable = new MyObject
просто короче и красивее. Нет двойного упоминания типа, которое в данном контексте - масло масляное.
Ответ написан
Комментировать
DmitryITWorksMakarov
@DmitryITWorksMakarov
Пишу везде "var", где позволяет компилятор и алгоритм (в том смысле, что иногда при создании объекта некоторого класса через "new" или при возврате объекта из метода, его нужно положить в переменную типа родительского класса или интерфейса).
Меня в этом вопросе лень ведет: мне лень писать два раза наименование типа или вообще разбираться что там за тип и как именно он пишется.
При создании переменных типа double я также использую "var" и суффиксы:
var d = 5D;
опять же из соображений лени
Кроме того из соображений общего стиля тоже красиво писать везде "var".
Ответ написан
Комментировать
Casper-SC
@Casper-SC
Программист (.NET)
var можно писать, там где явно видно, что за тип у этой переменной.

Не хочется создавать длинное объявление, где дублируется название класса
var sync = new SynchronizationContext();

Видно сразу какой тип в переменной
var data = (SomeType[])context;

Linq
var filtered = data.Where(...);

Считаю, что пихать var где ни попадя неприемлемо. Зачем читающему код наводить курсор мыши, чтобы увидеть, какой это тип переменной.

Зачем вместо int писать var. Это вообще ни в какие ворота.

В решарпере далеко не все правила по дефолту нужно считать единственно верными. Их можно отключать.
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
На мой взгляд там, где тип известен - все-таки явное указание типа будет лучше.

Мой взгляд собственно вырос из эксплуатации как жестко типизированных языков так и совсем нетипизированных, где можно было написать где-нибудь в редкой ветке
x="qqq"
а потом где-то забабахать цикл
for(x=0, x=x+1, x<10)

и в итоге в рантайме словить редкую ошибку -)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы