Должен ли я * всегда * отдавать предпочтение неявно типизированным локальным переменным в C # 3.0? - PullRequest
26 голосов
/ 20 августа 2008

Resharper , конечно, так и думает, и из коробки вам понравится конвертировать

Dooberry dooberry = new Dooberry();

до

var dooberry = new Dooberry();

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

Ответы [ 12 ]

36 голосов
/ 20 августа 2008

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

var result = GetUserID();

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

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

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

11 голосов
/ 20 августа 2008

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

мне ясно:

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

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

var itemList = rssNode.SelectNodes("item");
var rssItems = new RssItem[itemList.Count];
9 голосов
/ 21 сентября 2008

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

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

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

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

4 голосов
/ 20 августа 2008

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

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

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

var myvariable = ResultFromMethod();

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

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

2 голосов
/ 20 августа 2008

Это было хорошее обсуждение @ Coding Horror

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

2 голосов
/ 20 августа 2008

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

1 голос
/ 19 марта 2009

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

1 голос
/ 20 августа 2008

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

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

Джон.

0 голосов
/ 20 августа 2008

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

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

0 голосов
/ 20 августа 2008

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * по по её.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...