Почему постфиксный оператор ! скажите, что это не нужно при компиляции в режиме Release в RiderC#

Место общения программистов C#
Anonymous
Почему постфиксный оператор ! скажите, что это не нужно при компиляции в режиме Release в Rider

Сообщение Anonymous »

Вот очень простой MRE. Я использую System.Diagnostics:

Код: Выделить всё

using System;
using System.Diagnostics;

class Program
{
static void Main()
{
string? myVariableString = Console.ReadLine();

int? myVariable;
try
{
myVariable = int.Parse(myVariableString!);
}
catch (FormatException)
{
myVariable = null;
}

Debug.Assert(myVariable.HasValue);

Console.WriteLine(myVariable!.Value);
}
}
Насколько я понимаю, Rider должен пометить постфиксный оператор ! как избыточный при компиляции в режиме отладки (и это так! В нем говорится: «Выражение подавления предупреждений, допускающее значение NULL, является избыточным») и не должен этого делать при компиляции в режиме выпуска, поскольку Debug.Assert не будет запускаться, когда оптимизация включена. Однако даже в режиме выпуска я получаю предупреждение.

Выражение подавления предупреждений, допускающее значение NULL, является избыточным

Почему это так? Что гарантирует компилятору/статическому анализатору его избыточность?
Доказательство:
Изображение

Я использую .NET = 10.0.104 и пишу код в JetBrains Rider 2026.1.0.1 на компьютере с Windows 11.

Вернуться в «C#»