Должен ли я * всегда * отдавать предпочтение неявно типизированным локальным переменным в C # 3.0?

Решарпер, конечно, так думает, и из коробки это вынудит вас конвертировать

Dooberry dooberry = new Dooberry();

в

var dooberry = new Dooberry();

Это действительно считается лучшим стилем?

19.08.2008 21:49:07
ммммм ... чертовка .. вкусно!
Jeff Atwood 20.09.2008 17:06:42
12 ОТВЕТОВ
РЕШЕНИЕ

Это, конечно, вопрос стиля, но я согласен с Dare: C # 3.0 Неявные объявления типов: var или нет var? , Я думаю, что использование var вместо явного типа делает ваш код менее читабельным. В следующем коде:

var result = GetUserID();

Каков результат? Int, строка, GUID? Да, это важно, и нет, мне не нужно копаться в коде, чтобы узнать. Это особенно раздражает в примерах кода.

Джефф написал пост об этом, сказав, что он одобряет вар . Но этот парень сумасшедший!

Я вижу образец успеха в работе со стеком: выкапываю старые сообщения CodingHorror и (в стиле Jeopardy) формулирую их в терминах вопроса.

37
15.04.2014 15:11:14
Почему бы не исправить имя переменной вместо того, чтобы жаловаться на var? var userID = GetUserID (); На самом деле это не очень важно, если userID равен string или int, это то, что идентифицирует пользователя и должно быть принято соответствующими функциями.
Ilya Ryzhenkov 22.09.2008 06:39:00

Я чувствую, что это будет один из самых популярных вопросов, задаваемых со временем в Stack Overflow. Это сводится к предпочтениям. Все, что вы думаете, более читабельно. Я предпочитаю var, когда тип определен справа, потому что он более краткий. Когда я присваиваю переменную из вызова метода, я использую явное объявление типа.

2
19.08.2008 21:53:12

«Лучший стиль» субъективен и варьируется в зависимости от контекста.

Иногда проще использовать 'var' вместо того, чтобы вводить какое-то очень длинное имя класса, или если вы не уверены в типе возвращаемого значения данной функции. Я нахожу, что использую 'var' больше, когда слоняюсь с Linq, или для объявлений цикла.

В других случаях использование полного имени класса более полезно, поскольку оно документирует код лучше, чем var.

Я чувствую, что решение должен принять разработчик. Там нет серебряной пули. Нет «одного верного пути».

Ура!

0
19.08.2008 21:54:30

Не всегда, но я бы пошел так далеко, чтобы сказать, что много времени. Объявления типов не намного полезнее, чем когда-либо были венгерские нотации. У вас все еще остается та же проблема, что типы могут изменяться, и поскольку инструменты рефакторинга полезны, потому что это не идеально, по сравнению с тем, что вам не нужно менять место, где указан тип, за исключением одного места, что следует «Не повторять себя». принцип.

Любой однострочный оператор, в котором имя типа может быть указано как для переменной, так и для ее значения, обязательно должен использовать var, особенно если это длинный общий <OtherGeneric <T, U, V>, словарь <X, Y >>>

0
19.08.2008 21:55:07

Была хорошая дискуссия по этому @ Coding Horror

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

2
19.08.2008 22:02:10

@jongalloway - var не обязательно делает ваш код более нечитаемым.

var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;

Первый читается так же, как и второй, и требует меньше работы

var myvariable = ResultFromMethod();

здесь у вас есть точка зрения, var может сделать код менее читабельным. Мне нравится var, потому что если я изменяю десятичное число на двойное, мне не нужно менять его в нескольких местах (и не говорите «рефакторинг», иногда я забываю, просто дайте мне var!)

РЕДАКТИРОВАТЬ: просто прочитайте статью, я согласен. лол.

4
19.08.2008 22:26:44

Одно из преимуществ такого инструмента, как ReSharper, заключается в том, что вы можете писать код так, как вам нравится, и впоследствии переформатировать его в нечто более удобное для сопровождения. Я установил R #, чтобы всегда переформатировать так, чтобы фактический используемый тип был виден, однако при написании кода я почти всегда набираю 'var'.

Хорошие инструменты позволяют вам иметь лучшее из обоих миров.

Джон.

1
19.08.2008 22:46:10

На эту тему есть действительно хорошая статья MSDN, в которой описаны некоторые случаи, когда вы не можете использовать var:

Следующие ограничения применяются к объявлениям переменных с неявным типом:

  • var можно использовать только тогда, когда локальная переменная объявлена ​​и инициализирована в том же операторе; переменная не может быть инициализирована нулем, или группой методов, или анонимной функцией.
  • var нельзя использовать для полей в области видимости класса.
  • Переменные, объявленные с помощью var, нельзя использовать в выражении инициализации. Другими словами, это выражение допустимо: int i = (i = 20); но это выражение вызывает ошибку во время компиляции: var i = (i = 20);
  • Несколько переменных с неявным типом не могут быть инициализированы в одном выражении.
  • Если тип с именем var находится в области видимости, ключевое слово var будет преобразовано в имя этого типа и не будет рассматриваться как часть неявно типизированного объявления локальной переменной.

Я бы порекомендовал проверить это, чтобы понять все последствия использования var в вашем коде.

0
20.08.2008 01:53:58

Я использую его только тогда, когда очевидно, что такое var.

ясно для меня:

XmlNodeList itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];

мне не понятно

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
12
9.01.2013 16:59:25

Я вижу образец успеха в работе со стеком: выкапываю старые сообщения CodingHorror и (в стиле Jeopardy) формулирую их в терминах вопроса.

Я признаю себя невиновным! Но вы правы, это казалось довольно популярным небольшим вопросом.

0
20.08.2008 14:24:04

Лучшее резюме ответа, который я видел на это комментарий Эрика Липперта , который, по сути, говорит, что вы должны использовать конкретный тип, если важно, что это за тип, а не иначе. По существу информация о типе должна быть зарезервирована для мест, где тип важен.

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

Большинство рекомендаций, на которые ссылаются люди (например, Дейра), являются рекомендациями, сделанными людьми, которые никогда не пробовали кодировать, используя var вместо конкретного типа. Это делает рекомендации почти бесполезными, потому что они не говорят из опыта, они просто экстраполируют.

Лучший совет, который я могу вам дать, - это попробовать самим и посмотреть, что работает для вас и вашей команды.

9
21.09.2008 17:26:18

Это имеет смысл только тогда, когда вы не знаете тип заранее.

1
19.03.2009 02:07:26