Часто нам говорят что-то вроде
Если вы вызываете метод с возвращаемым значением, которое не изменяется, выведите его из цикла.
например, при написании кода вроде:
for(int i=0; i < Instance.ExpensiveNonChangingMethod(); i++)
{
// Stuff
}
Мне было бы интересно, если бы вы могли как-то сказать компилятору, который дал одинаковые входные данные (и экземпляр объекта), вы получите те же выходные данные, поэтомузнаю, что это может вывести его из цикла как часть процесса оптимизации.
Существует ли что-нибудь подобное?Возможно, что-то вроде код-контракта или spec # ?Или они уже могут делать такие вещи?
Возможно ли, что компилятор рассудит, что метод является чистой функцией сам по себе?
Есть ли что-нибудь, что я могу использовать в C #, что позволит компилятору выполнять больше оптимизации, чем в противном случае? Да, я знаю о преждевременной оптимизации.Я спрашиваю, в основном, из любопытства, но также, если что-то подобное есть, это будет «бесплатно», как только метод будет отмечен.