ReSharper и var [дубликат]

Как использовать классы, предоставляемые пространствами имен System.IO, System.Text.RegularExpressions из CommonSpace.

blockquote>

Вы не можете: спецификация языка состоит в том, что операторы using имеют область действия, ограниченную единицей компиляции или телом пространства имен, в котором они объявлены. На практике это означает, что они никогда не видны за пределами файла, в котором находится объявление, а в случае вашего CommonSpace они находятся в фигурных скобках.

Подробнее в спецификации языка C #

Для этого есть веская причина: если вы хотите узнать, какое пространство имен использует класс в фрагменте кода, это правильно там в файле. Не было бы конца проблем с конфликтами имен, если бы все директивы using из другого места просачивались в ваше пространство имен.

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

51
задан Community 23 May 2017 в 01:54
поделиться

6 ответов

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

var currentTab = tabCaseNotes.TabPages[e.Index];
var itemRect = tabCaseNotes.GetTabRect(e.Index);
var fillBrush = new SolidBrush(Color.Linen);
var textBrush = new SolidBrush(Color.Black);
var sf = new StringFormat
   {
      Alignment = StringAlignment.Center,
      LineAlignment = StringAlignment.Center
   };

Обновление: Я добавлю спорный взгляд на него. Если я не читаю код из книги, меня обычно не волнует, какой это конкретный тип для понимания некоторых строк кода, которые я читаю. Рассмотрим .GetTableRectangle (e.Index), для которого вы не показываете код, который работает с ним:

var itemRect = tabCaseNotes.GetTableRectangle(e.Index);
//do some operations on itemRect

Читая этот конкретный код, я больше пойму его из операций над itemRect, чем из его типа. Это могут быть IRectangle, Rectangle, CustomRectangle, и они по-прежнему мало что говорят о том, что делает с ним код. Вместо этого я забочусь о itemRect.Height, itemRect.Width или itemRect.GetArea () вместе с соответствующей логикой.

Обновление 2: Как уже отмечали другие, вы можете отключить его. Следите за тем, чтобы команда придерживалась тех же методов, иначе вы, возможно, в конечном итоге будете вносить изменения так или иначе каждый раз, когда другой человек касается кода. См .: http://www.jetbrains.com/resharper/features/codeTemplate.html

18
ответ дан eglasius 7 November 2019 в 10:10
поделиться

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

Лично я часто склонен оставлять первые две строки в одиночестве, потому что мне нравится видеть имя типа для переменной явно указан где-то в строке, где объявлена ​​переменная. Во всяком случае, я мог бы искать интерфейс для использования вместо этого, чтобы я также получил ту же «универсальность» как и с ключевым словом var без потери важной информации о типе читаемой информации. Тем не менее, я бы определенно использовал var для fillBrush , textBrush и sf .

44
ответ дан Joel Coehoorn 7 November 2019 в 10:10
поделиться

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

РЕДАКТИРОВАТЬ - интересная ссылка для обсуждения темы.

Кажется, что ее можно отключить, перейдите в Resharper -> Параметры -> Проверка кода -> Уровень проверки и немного прокрутите вниз. чтобы увидеть опции, связанные с var .

15
ответ дан Steve 7 November 2019 в 10:10
поделиться

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

7
ответ дан Mark Sherretta 7 November 2019 в 10:10
поделиться

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

Тем не менее, если вы думаете, что более просто прочитать явное объявление типа, это ваше дело. Вам не нужно делать все, что вам скажет Решарпер. Вы даже можете отключить это правило, если хотите.

0
ответ дан dustyburwell 7 November 2019 в 10:10
поделиться

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

SuperDisconfibulator sd=new SuperDisconfibulator();

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

0
ответ дан ryeguy 7 November 2019 в 10:10
поделиться
Другие вопросы по тегам:

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