int two = 2;
return arr.Where(x => x % two == 0).Sum();
}
Ну он же прекрасно знает, что это константа, сам предлагает такой рефакторинг, так какого черта не делает сам?
int X(int[] arr) { const int two = 2; return arr.Where(x => x % two == 0).Sum(); }
const int слишком длинная конструкция, чтобы писать её руками. Почему компилятор не может сам её написать?
Ну он же видит, что two не переприсваивается
починил public class C { int X(int[] arr) { const int two = 2; return arr.Where(x => x % two == 0).Sum(); }
потому что рослин не делает никаких оптимизаций, как написал так и будет
(Некоторые делает)
string S(string a, string b, string c) => a + b + c;
он ещё 2+4 вычислит)
Нет, он может клозеру создать даже если она в конце и не на хэппи пате
Это подстава кстати, приходится разбивать метод на 2, первый без замыкания, второй без. Компилятор мог бы быть и поумнее
+ от переменной может быть получен реф например из метода снаружи
Как переменная может сбежать из метода? Понятно, что если таки сбегает — придётся создавать замыкание
В исходном примере ничего не берётся по ref
Обсуждают сегодня