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

StackOverflow https://stackoverflow.com/questions/17032

  •  08-06-2019
  •  | 
  •  

Вопрос

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

Dooberry dooberry = new Dooberry();

к

var dooberry = new Dooberry();

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

Это было полезно?

Решение

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

var result = GetUserID();

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

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

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

Другие советы

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

мне ясно:

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

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

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

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

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

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

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

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

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

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

var myvariable = ResultFromMethod();

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

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

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

По этому поводу было хорошее обсуждение @ Кодирование ужасов

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

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

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

Джон.

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

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

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

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

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

Ваше здоровье!

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

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

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

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

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

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

Я вижу шаблон для успеха StackOverflow:Выкопайте старые посты Codinghorror и (стиль Jeopardy), выразите их с точки зрения вопроса.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top