"String" vs. "string" в быстрой подсказке о IsNullOrWhiteSpace()

Работа в Visual Studio 2015, у меня есть условная проверка на действие:

if(String.IsNullOrWhiteSpace(stringToTest))

И я увидел быстрый кончик или действие IDE001 предлагая, чтобы "Имя могло быть упрощено" с предлагаемой коррекцией:

if(String.IsNullOrWhiteSpace(stringToTest))

С той лишь разницей, что использовать string вместо string.

full quicktip


Примеры MSDN используют верхний регистр S с string и этот ответ SO поясняет, что "string является псевдонимом в С# для System.String. Так что технически, нет никакой разницы".

И чтобы быть ясным, мой вопрос основывается на ответах String vs. string, но у меня другой вопрос, чем то, что там задано.

Также связан этот вопрос SO, хотя ответы там действительно не затрагивают вопрос. Этот конкретный вопрос очень похож на мой, однако он отмечен как дубликат другого вопроса SO, который я отметил. И есть комментарий от OP, указывающий, что это совершенно новое поведение, которое наблюдается только в 2015 году.


Мой вопрос

Мой вопрос в том, что если два типа переменных эквивалентны, а в примерах MS используется версия верхнего регистра, почему я вижу быстрые действия для использования версии с нижним регистром? Были ли изменения в платформе .NET 4.6 и VS2015 для поощрения использования версии с нижним регистром? Кажется, я не должен видеть этот тип подсказки.

Ответ 1

Я только размышляю, но мне кажется, что быстрый совет призван помочь вам упростить System.String до string, игнорируя тот факт, что ваш using сделал его излишним, по крайней мере, с точки зрения характера -counting.

Назовите это ошибкой (хотя и крайне незначительной), или, по крайней мере, IDE становится чрезмерно усердной. Можно утверждать, что это допустимое упрощение в более широком смысле, особенно если вы будете использовать эти короткие "псевдонимы" последовательно в своем коде. Как разработчик на С++, я на самом деле не вижу его, но там вы идете.

Ответ 2

Ну, как умнее меня отметили, на самом деле нет разницы в уровне компиляции, и, как и вы (и, как и JohnyL, как вы увидите;), я также подумал, что это ошибка, и добрался до того, что привело меня к моему ответу

почему я вижу быстрые действия для использования версии в нижнем регистре?

Взято из это информативное (и смешное) обсуждение ошибок, это основные моменты для этой функции:

  • Он не просто меняет регистр букв, он заменяет имя типа String ключевым словом String. Тот факт, что 2, случается, отличается только случаем, является совпадением. Бывают случаи, когда количество символов различно (Int32 -> int), или имя полностью отличается (Single -> float).
  • Имена более строчных имен легче вводить.
  • Для людей, которые фактически предпочитают согласованный формат String в коде (он, вероятно, зависит от других языков, которые вы кодируете и их условностей), эта функция помогает изменить существующий исходный код, чтобы быть последовательным.
  • String также является ключевым словом с четко определенным значением, а значение String может отличаться в зависимости от контекста.

Были ли изменения в платформе .NET 4.6 и VS2015 для поощрения использования версии в нижнем регистре?

Насколько я читал, No.

BTW, вы можете изменить это поведение в соответствии с вашими предпочтениями в "Инструменты" > "Параметры" > "Текстовый редактор" > "С#" > "Стиль кода" → "Снимите флажок". Предпочитайте встроенное предопределенное ключевое слово типа в выражениях доступа к членству ".

Ответ 3

Для компилятора нет никакой разницы, но быстрые исправления IDE также используются для обеспечения хорошего стиля (например, соглашений об именах). Вы программируете на С#, поэтому вы должны использовать его функции (в данном случае - псевдоним типа bultin).

Я думаю, вы используете int вместо Int32, правильно? То же самое для string и string. Хотя для string нет реальной разницы в длине, это по-прежнему аналогичный случай.

Ответ 4

У меня есть подозрение, что основной причиной изменения System.String до string является то, что он рассматривается как примитивный .NET. А поскольку все примитивы имеют псевдонимы - System.Int32int, System.Charchar и т.д., Для согласованности "строка" обрабатывается одинаково. Просмотрев все виды документации MSDN, вы увидите, что эти два варианта используются взаимозаменяемо; Я думаю, что простой контроль со своей стороны.

Независимо от того, оправдан или нет, я все еще буду использовать string над string, как подсказывают подсказки. Звучит как пример Grandma Cooking Secret, но есть ли причина изменить это поведение в этом случае?