Resharper определенно так думает, и из коробки он будет пилить вас, чтобы преобразовать
Dooberry dooberry = new Dooberry();
to
var dooberry = new Dooberry();
Это действительно лучший стиль?
Resharper определенно так думает, и из коробки он будет пилить вас, чтобы преобразовать
Dooberry dooberry = new Dooberry();
to
var dooberry = new Dooberry();
Это действительно лучший стиль?
Конечно, это вопрос стиля, но я согласен с Dare: C # 3.0 Implicit Объявления типов: в var или не в var?. Я думаю, что использование var вместо явного типа делает ваш код менее читабельным. В следующем коде:
var result = GetUserID();
Какой результат? Целое число, строка, GUID? Да, это имеет значение, и нет, мне не нужно копаться в коде, чтобы узнать это. Особенно раздражает в примерах кода.
Джефф написал по этому поводу сообщение, в котором он предпочитает var. Но этот парень сумасшедший!
Я вижу образец успеха 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), - это рекомендации, сделанные людьми, которые никогда не пробовали кодировать с использованием var вместо конкретного типа. Это делает рекомендации бесполезными, потому что они не основаны на опыте, а просто экстраполируют.
Лучший совет, который я могу вам дать, - попробовать это на себе и посмотреть, что работает для вас и вашей команды.
@jongalloway - var не обязательно делает ваш код более нечитаемым.
var myvariable = DateTime.Now
DateTime myvariable = DateTime.Now;
Первый так же читабелен, как и второй, и требует меньше усилий.
var myvariable = ResultFromMethod();
Здесь вы понимаете, что var может сделать код менее читабельным. Мне нравится var, потому что, если я заменяю десятичное число на double, мне не нужно менять его в нескольких местах (и не говорите рефакторинг, иногда я забываю, просто позвольте мне var!)
РЕДАКТИРОВАТЬ: просто прочтите статью, я согласен. ржу не могу.
Этот @ Coding Horror прошел хорошее обсуждение.
Лично я стараюсь свести его использование к минимуму, я обнаружил, что это ухудшает удобочитаемость, особенно при назначении переменной из вызова метода.
Я чувствую, что это будет один из самых популярных вопросов, которые со временем задают на Stack Overflow. Все сводится к предпочтениям. Все, что вы думаете, более читабельно. Я предпочитаю var, когда тип определен справа, потому что он короче. Когда я назначаю переменную из вызова метода, я использую явное объявление типа.
Это имеет смысл только тогда, когда вы заранее не знаете тип.
В C# 9.0
есть новый способ инициализации класса с помощью Новые выражения с целевым типом.
Вы можете инициализировать класс следующим образом:
Dooberry dooberry = new();
Лично мне он нравится больше, чем использование var
, и для меня он более читабелен.
Что касается вызова метода, я думаю, это зависит от вас. Лично я предпочитаю указывать тип, потому что я думаю, что это более читабельно:
Dooberry dooberry = GetDooberry();
В некоторых случаях очень ясно, что это за тип, в данном случае я использую var:
var now = DateTime.Now;
Одним из преимуществ такого инструмента, как ReSharper, является то, что вы можете писать код, как вам нравится, а затем переформатировать его во что-то более удобное для обслуживания. У меня R # настроен на постоянное переформатирование таким образом, чтобы был виден фактический используемый тип, однако при написании кода я почти всегда набираю var.
Хорошие инструменты позволят вам получить лучшее из обоих миров.
Джон.
«Лучший стиль» субъективен и варьируется в зависимости от контекста.
Иногда проще использовать var вместо того, чтобы вводить очень длинное имя класса, или если вы не уверены в типе возвращаемого значения данной функции. Я обнаружил, что использую 'var' чаще при работе с Linq или в объявлениях цикла.
В других случаях использование полного имени класса более полезно, поскольку оно документирует код лучше, чем var.
Я считаю, что решение должен принимать разработчик. Серебряной пули нет. Нет «единственно верного пути».
Ваше здоровье!
Я вижу образец успеха stackoverflow: раскопайте старые сообщения CodingHorror и (в стиле Jeopardy) сформулируйте их в терминах вопроса.
Я не признаю своей невиновности! Но вы правы, этот вопрос казался относительно популярным.
На эту тему есть действительно хорошая статья в MSDN, в которой описаны некоторые примеры. где нельзя использовать var:
К объявлениям переменных с неявной типизацией применяются следующие ограничения:
- var может использоваться только тогда, когда локальная переменная объявлена и инициализирована в том же операторе; переменная не может быть инициализирована значением NULL, группой методов или анонимной функцией.
- var не может использоваться в полях в области класса.
- Переменные, объявленные с помощью var, не могут использоваться в выражении инициализации. Другими словами, это выражение допустимо: int i = (i = 20); но это выражение вызывает ошибку времени компиляции: var i = (i = 20);
- Несколько неявно типизированных переменных не могут быть инициализированы в одном операторе.
- Если тип с именем var находится в области видимости, то ключевое слово var будет преобразовано в это имя типа и не будет рассматриваться как часть объявления неявно типизированной локальной переменной.
Я бы рекомендовал проверить это, чтобы понять все последствия использования var в вашем коде.
Нет, не всегда, но я бы сказал, что часто. Объявления типов не намного полезнее, чем когда-либо были венгерские обозначения. У вас по-прежнему есть та же проблема, что типы могут изменяться, и поскольку инструменты рефакторинга полезны, это не идеально по сравнению с отсутствием необходимости изменять там, где указан тип, кроме одного места, что следует за рекомендацией Don't Repeat Yourself принцип.
Любой однострочный оператор, в котором имя типа может быть указано как для переменной, так и для ее значения, обязательно должен использовать var, особенно когда это длинный Generic<OtherGeneric< T,U,V>, Dictionary< X, Y>>>