Для а)
Из спецификации C #, раздел 7.2.1:
Когда операнд встречается между двумя операторами с одинаковым приоритетом, ассоциативность операторов контролирует порядок, в котором выполняются операции:
- За исключением операторов присваивания, все бинарные операторы являются левоассоциативными, что означает, что операции выполняются слева направо. Например, x + y + z оценивается как (x + y) + z.
- Операторы присваивания и условный оператор (? :) являются ассоциативными справа, что означает, что операции выполняются справа налево. Например, x = y = z оценивается как x = (y = z).
Это означает, что в этом случае операторы получат приоритет слева направо.
б) Да, это правильно. Это выражение Cast, описанное в разделе 7.6.6, которое применяется к унарному выражению, а приведение классифицируется с помощью унарных операторов (раздел 7.6) и рассматривается с таким же приоритетом.