многие конструкции в коде являются не просто синтаксическим сахаром, но инициализацией скрытых от пользователя классов, например итераторов, генераторов, иногда дженериков, иногда нет. так вот, обычно, получается, что у тебя код IL обратно не собирается в понятный C# код, даже если делать это руками, потому что иногда это просто связано с тем, что когда к тебе привозят самосвал пронумерованных кирпичей, даже опытный строитель не всегда может собрать изначальную конструкцию. иногда, случаются, там зеркальные постройки, аналогичные по функционалу, но вот поднять точно такое же сооружение не представляется возможным. другое дело, если у тебя есть план всех этажей с полной строительной документацией (.pdb или собранная в режиме Debug, сборка, чем она отличается - в Debug обычно нет оптимизаций, treeшейкинга кода, удаления ненужных классов, ссылок и оптимизации времени исполнения, JIT-оптимизации), и вот ты такой довольный, "я смог воспользоваться реверс инжинирингом!", теперь включай Release сборку, оптимизацию кода, нативную компиляцию в таргет linux x64, удаляй .pdb, и вот, ты уже не такой кароль мира, как казался