Комментарии 14
ind ?? -1;
Я правильно понимаю, что там должен быть обычный тернарник?
Должно быть .FirstOrDefault(-1)
ind == 0 ? 0 : -1;
Вы имелли в виду вот так? Индексы обычно начинаются с 0, так что подобное исправление будет ошибочным :).
Скорее `ind != 0 ? ind : -1`
Я с C# не работал и думал что результатом LINQ будет значение первого элемента, а не индекс и что 0 не очень хочется в качестве значения иметь.
Я понимаю, что суть ваших (очень интересных, спасибо вам) постов не в том, чтобы улучшить качество проверяемых продуктов, но всё же спрошу: раз уж вы для написания статей всё равно проверяете продукты, то их разработчикам о результатах сообщаете?
О половине из этих ошибок в С# предупредит сама VS 2022 если в настройках проекта будет установлено использование Nullable. Иногда приходится редактировать свои старые проекты без Nullable - очень неудобно когда не знаешь надо ли делать проверку на null или там гарантированно есть значение.
Nullable безусловно полезная штука, хотя и холиварная. Кому-то нравится, а кому-то нет. Мне, например среди C# ошибок из этой статьи больше всего нравится про бесполезный '??'. Про этот кейс могу точно сказать, что его VS 2022 не ловит. Да и статические анализаторы же не только разыменования нулевых ссылок ищут.
Да, кейс с ?? очень хорош. Эта статья напомнила что пора бы опять задействовать ваш продукт, и как раз этот кейс обнаружился в одном из проектов.
К слову, если есть такой код:
int? val;
...
if (val != null)
model.Use(val ?? 0);
...
class Model {
public void Use(int val) { ... }
}
то PVS-Studio выдаст предупреждение в последней строчке, но будет доволен таким кодом:
int? val;
...
if (val != null)
model.Use(val);
Но тогда VS ругается. Компромис - явное приведение типа:
int? val;
...
if (val != null)
model.Use((int)val);
HANDLE proc = OpenProcess(PROCESS_TERMINATE, false, g_settings_process_id);
if (proc != INVALID_HANDLE_VALUE)
А вот что ваш анализатор не смог увидеть, это то, что OpenProcess возвращает NULL в случае неудачи, а не INVALID_HANDLE_VALUE.
Microsoft PowerToys: Король GitHub среди C# проектов с C++ ошибками