PVS-Studio corporate blog
Open source
.NET
Amazon Web Services
C#
Comments 14
+4

А как ваш анализатор в сравнении в плане функционала со встроенным JetBrains анализатором в Rider IDE? Спасибо.

+5
Встроенные анализаторы от JetBrains для различных языков однозначно хороши. Однако, они просто части инструментов, помогающие ещё продуктивнее программировать. PVS-Studio классический статический анализатор, ориентированный на встраивание в большие старые проекты. В PVS-Studio реализованы такие механизмы, как массовое подавление предупреждений, что позволяет видеть только ошибки в новом и изменённом коде. Это даёт возможность легко начать использовать PVS-Studio на большой кодовой базе, отложив технический долг на потом. PVS-Studio интегрируется с SonarQube и т.д.
А вообще, лучше всего сравнить возможности, взяв и проверив свои проекты с помощью PVS-Studio.
+2
Как всегда качественная статья. И полезно, и напомнили о себе.

1) Не самое красивое(для чтения) решение. Мне кажется удобнее или однострочный if\else, или присваивание значение по умолчанию для «value».
Код
if (String.IsNullOrEmpty(value))
{
this.linker.s3.region = "us-east-1";
return;
}
this.linker.s3.region = value;



2) А нет ли тут ошибки? Возможно нужно было иначе?
Код
IList conditionValues = keyEntry.Value;
if (conditionValues != null && conditionValues.Count == 0)
continue;



Решение
if (conditionValues == null || conditionValues.Count == 0)


0
мне больше нравится вот такой вариант:
if (conditionValues?.Any() != true)
+2

Насчет простыни с if-ами которая возвращает эксепшн по коду: мне кажется более элегантное решение, это создать статический Dictionary<string, Exception>. Вызывая myDictionary.TryGetValue("code") возвращаем нужный эксепшн. Ну и следующий программист не сможет вставить повторяющиеся ключ. Доступ по ключу в Dictionary очень быстрый и время доступа не зависит от колличества элементов.

+1

Нет, так делать нельзя, нужно же кидать новые исключения, а не одно и то же каждый раз. Можно использовать Dictionary<string, Func<ErrorResponse, Exception, HttpStatusCode, Exception>>, но я бы просто написал switch.

0

Да, вы правы. Конкретно в этом случае нельзя, так как есть параметры. Case как и If "растянет" метод, и опять же с таким количеством if или case при расчете "сложности" метода мы перевалим за десятку. Я бы предпочёл вариант с Func, ну или на крайний случай словарь с типами и активацией через рефлекшн(жесть конечно, но это лучше чем десятки if).

0
Дело не только в параметрах. Exception — изменяемый тип данных, его нельзя выкидывать несколько раз просто так.
+2

State19 — очевидно автогенерённый код лексера по грамматике, это мусорный варнинг. Автогенерённый код надо исключать из анализа.

+1

Ну и варнинги про нереализованный хэшкод люди не сильно любят. По хорошему стоит выдавать его только если где-то в проекте этот объект действительно используется как ключ для хэша. А если нет, зачем парить мозги разработчикам, отвлекая от реальных проблем?

+1

Например, чтобы хранить объекты в списках и искать/удалять там? Иногда линейный поиск вполне достаточен. Ну и в целом, чтобы иметь возможность сравнивать объекты. Иногда это нужно без хэш-таблиц. Если объект при этом ещё IComparable, его можно хранить в упорядоченных множествах без хэшкода.

0
Например, чтобы хранить объекты в списках и искать/удалять там? Иногда линейный поиск вполне достаточен.

А что тогда мешает использовать упорядоченную структуру и реализовать только IComparable?
0
В этот раз мы имеем дело с гораздо большим объёмом кода, включающим в себя около 34 тысяч cs-файлов, а общее число строк кода (без учета пустых) составляет впечатляющие 5 миллионов.

Какова причина этого? Индусам до сих пор платят за объем кода, или потому-что .NET настолько многословен? Недавно писал библиотеку для GDrive на основе нативного явавского HTTPConnection, вышло на лист где-то, ибо это же просто обвертка для HTTPConnection! А ведь Ява намного более многословна чем тот же .NET, любая библиотека — это же просто обвертка для API, то есть нужно получить контент в JSON, распарсить его какой-нибудь библиотекой (часто она из коробки идет), и сделать что надо с полученными данными, что еще-то? Или они там что, для CORBA что-ли писали (монструозный предшественник REST API)? Но я что-то не помню чтобы Amazon поддерживал Корбу, они вроде с самого начала в JSON все выдавали.
Only those users with full accounts are able to leave comments. , please.