Действительно ли это - плохая практика для явного объявления значения поля по умолчанию? [дубликат]

Вы можете использовать cross apply вместо join:

select r.DATE_, r.SAL
from RES r cross apply
     (select top 1 b.*
      from BAD b
      where r.SAL = b.SAL 
      order by b.bad_id asc
     ) b 
where r.DATE_ = b.DATE_;

Однако, я думаю, что логика более четко написана как:

select r.DATE_, r.SAL
from RES r 
where r.DATE_ = (select top (1) b.DATE_
                 from BAD b
                 where r.SAL = b.SAL 
                 order by b.bad_id asc
                ) ;
5
задан Community 23 May 2017 в 12:03
поделиться

7 ответов

Это избыточно, но я остался бы последовательным. Если Вы всегда инициализируете поля, сохраните это тем путем независимо от типа. Кроме того, как Вы указали в комментарии, обязанность думают о значениях по умолчанию для определенных типов, недовольно, таким образом, другая причина инициализировать сначала.

10
ответ дан 18 December 2019 в 08:31
поделиться

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

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

7
ответ дан 18 December 2019 в 08:31
поделиться

Инициализация полей могла бы подразумевать потерю производительности:

2
ответ дан 18 December 2019 в 08:31
поделиться

Я сказал бы, что это - плохая практика для не явного определения поля. Неинициализированное поле, как должно предполагаться, не является значением по умолчанию, оно должно быть принято как "пустой указатель". В этом случае Вы хотите, чтобы это явно было 0, и необходимо поэтому объявить, что это 0.

Resharper является очень строгим стилем кодирования, и Вы не должны вслепую слушать его, особенно если он повреждает удобочитаемость Вашего кода.

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

0
ответ дан 18 December 2019 в 08:31
поделиться

Если это как Java вообще (на сотовом телефоне... Трудно для поиска) затем явно инициализация это означает, что Вы не можете отметить поле как финал (могла бы быть константа в C#), который мешает правильно делать immutible класс.

0
ответ дан 18 December 2019 в 08:31
поделиться

Общий ответ похож на других, указали, если он имеет больше смысла Вам, и Ваши команды затем сбрасывают установку Reshaper к подсказке. C# инициализирует все значения к их значению по умолчанию (0 для чисел, пустого указателя для ссылочных типов), который эквивалентен.NET 2,0 оператора по умолчанию:

int i = default(int);

Править: Вы не использовали бы вышеупомянутое в своем коде. Это эквивалентно 'мне = 0', однако это намного менее читаемо. Я только использовал его, чтобы проиллюстрировать, что тезис о неназначенных переменных инициализируется с их значением по умолчанию.

0
ответ дан 18 December 2019 в 08:31
поделиться

Я предполагаю, что это - вопрос вкуса, но как я сказал в другом месте, мне не нравится дублирование.

Бросание инициализатора для поля могло или означать, что кодер знал, что это будет инициализировано к значениям по умолчанию, или что он знал, что это не будет инициализировано и не заботилось, или иначе он не думал об этом, и его код просто, оказывается, работает. Последние два были бы, будем мы говорить, "образовательный opportunitites".

С другой стороны, инициализация поля к его значению по умолчанию говорит мне, что кодер не понимает платформу или не доверяет ему.

Что относительно случаев, где значение по умолчанию никогда не используется? Случаи, где поле инициализируется от всех конструкторов, или где поле всегда устанавливается прежде чем быть считанным? В тех случаях, устанавливая на значение по умолчанию не признак намерения - только признак следующих правило, которое не имеет никакого смысла.

0
ответ дан 18 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

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