Почему «переключатель возврата x» генерирует «if (1 == 0)» в ILSpy?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему «переключатель возврата x» генерирует «if (1 == 0)» в ILSpy?

Сообщение Anonymous »

Я использовал ILSpy в своем коде из любопытства и заметил, что if (1 == 0) вокруг операторов return x switch были добавлены пустые инструкции.
Вот пример такого поведения:

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

public static string TestReturnSwitch(string name)
{
return name switch
{
"General Kenobi" => "Hello there!",
"Inigo Montoya" => "My name is Inigo Montoya [...]",
"T800" => "Sarah Connor?",
_ => "???"
};
}
Приведенный выше код на IL преобразуется в:

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

public static string TestReturnSwitch(string name)
{
if (1 == 0)
{
}
string result = name switch
{
"General Kenobi" => "Hello there!",
"Inigo Montoya" => "My name is Inigo Montoya [...]",
"T800" => "Sarah Connor?",
_ => "???",
};
if (1 == 0)
{
}
return result;
}
Однако, если я изменю оператор return switch на классический оператор Switch Case, в результирующем IL не будет странного if (1 == 0) . Фактически, это становится точно таким же кодом, как и исходный пример.

То же самое поведение происходит с ILSpy v.8.2 (который использует .NET 6.0) и ILSpy v.9.0 Preview 2 (который использует .NET). 8.0).
Это ошибка ILSpy? Если нет, то почему эти инструкции добавляются?

Подробнее здесь: https://stackoverflow.com/questions/786 ... 0-in-ilspy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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