Сегодня, когда я кодировал, Visual Studio сообщила мне, что мой корпус коммутатора можно оптимизировать. Но код, который у меня был, по сравнению с кодом, который визуальная студия сгенерировала из моего переключателя, не дает такого же результата.
Используемое мной перечисление:
public enum State
{
ExampleA,
ExampleB,
ExampleC
};
После выполнения следующего кода значение равно 2147483647.
State stateExample = State.ExampleB;
double value;
switch (stateExample)
{
case State.ExampleA:
value = BitConverter.ToSingle(BitConverter.GetBytes((long)2147483646), 0);
break;
case State.ExampleB:
value = BitConverter.ToUInt32(BitConverter.GetBytes((long)2147483647), 0);
break;
case State.ExampleC:
value = BitConverter.ToInt16(BitConverter.GetBytes((long)2147483648), 0);
break;
default:
value = 0;
break;
}
Но когда Visual Studio оптимизировала случай переключения, значение становится 2147483648.
State stateExample = State.ExampleB;
double value = stateExample switch
{
State.ExampleA => BitConverter.ToSingle(BitConverter.GetBytes((long)2147483646), 0), //Commenting this line results in correct value
State.ExampleB => BitConverter.ToUInt32(BitConverter.GetBytes((long)2147483647), 0),
State.ExampleC => BitConverter.ToInt16(BitConverter.GetBytes((long)2147483648), 0),
_ => throw new InvalidOperationException()
};
Это просто код с информацией, воспроизводящей ошибочную вывод, а не фактический код, который выполняется в производственной среде. Что мне показалось странным, так это то, что если я закомментирую строку State.ExampleA
в последнем блоке кода, будет записано правильное значение.
Мой вопрос: это ошибка? Или мне что-то здесь не хватает?