Наверное, глупый вопрос, так как я, возможно, уже ответил на мой вопрос, но я просто хочу быть уверенным, что я ничего не пропущу
Константные выражения оцениваются во время компиляции в рамках проверенного контекста. Я думал, что следующее выражение не должно оцениваться во время компиляции, так как я предполагал, что С# считает конкретное выражение постоянным выражением только в том случае, если все операнды в левой части являются константами:
int i= 100;
long u = (int.MaxValue + 100 + i); //error
Вместо этого появляется компилятор, рассматривающий любое подвыражение, в котором оба операнда являются константами как константное выражение, даже если другие операнды в выражении не являются константами? Таким образом, компилятор может оценивать только часть выражения во время компиляции, в то время как оставшееся выражение (которое содержит непостоянные значения) будет оцениваться во время выполнения → Я предполагаю, что в следующем примере оценивается только (200 +100)
во время компиляции
int i=100;
long l = int.MaxValue + i + ( 200 + 100 ); // works
Правильны ли мои предположения?
спасибо