2016-01-04 2 views
8

Работа в Visual Studio 2015, у меня есть условный чек эффект:"String" против "строка" в QuickTip о IsNullOrWhiteSpace()

if(String.IsNullOrWhiteSpace(stringToTest)) 

И увидел я IDE001 quick tip or action предполагая, что " Название может быть упрощен»с предложенной коррекцией:

if(string.IsNullOrWhiteSpace(stringToTest)) 

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

full quicktip


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

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

Также есть this SO question, хотя ответы там действительно не затрагивают вопрос. Этот конкретный вопрос очень похож на мой, однако он отмечен как дубликат the other SO question. И there is a comment на ОП указывает на это совершенно новое поведение можно увидеть только в 2015 году


Мой вопрос

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

+0

Что вы подразумеваете под быстрыми подсказками? В Visual Studio, на MSDN или ...? –

+3

Этот вопрос уже является первым результатом Google для быстрого вызова IDE001. Я думаю, это достаточно доказательство того, что вы должны определить этот термин. –

+0

Я бы * угадал, что правило довольно общее (строка String-> в вашем коде) и будет иметь смысл большую часть времени, поскольку обычно вы хотите сказать такие вещи, как 'string foo =" bar "', а не 'String foo = "bar" '. Это просто не работает в случае вызовов статических методов, где имя класса более распространено. – adv12

ответ

3

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

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

0

У меня есть подозрение, что основная причина для изменения System.String - string заключается в том, что он считается примитивным .NET. И так как все примитивы имеют псевдонимы - System.Int32 ->int, System.Char ->char и т. Д., Для согласованности «строка» обрабатывается одинаково. Просмотрев все виды документации MSDN, вы увидите, что эти два варианта используются взаимозаменяемо; Я думаю, что это простой надзор с их стороны.

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

1

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

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

2

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

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

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

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

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

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

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

Смежные вопросы