我需要查找这个内容,所以想在这里发布一下。
来自C# 5.0规范
5.3.3.21 嵌套表达式的一般规则
以下规则适用于这些类型的表达式:带括号的表达式(§7.6.3),元素访问表达式(§7.6.6),使用索引的基本访问表达式(§7.6.8),增量和减量表达式(§7.6.9,§7.7.5),强制转换表达式(§7.7.6),一元 +、-、~、* 表达式,二元 +、-、*、/、%、<<、>>、<、<=、>、>=、==、!=、is、as、&、|、^ 表达式(§7.8、§7.9、§7.10、§7.11),复合赋值表达式(§7.17.2),已检查和未检查表达式(§7.6.12),以及数组和委托创建表达式(§7.6.10)。
这些表达式中的每一个都有一个或多个子表达式,这些子表达式在固定顺序下无条件地进行
评估(重点在此)。例如,二元 % 运算符首先计算运算符的左侧,然后计算右侧。索引操作计算索引表达式,然后按从左到右的顺序计算每个索引表达式。
每种表达式的详细规则在第7节中。我不会在这里列出所有规则,但是启发式规则是按照代码中编写的从左到右。例如。
7.5.1.2 Run-time evaluation of argument lists
The expressions of an argument list are always evaluated in the order they are written. Thus, the example
class Test
{
static void F(int x, int y = -1, int z = -2) {
System.Console.WriteLine("x = {0}, y = {1}, z = {2}", x, y, z);
}
static void Main() {
int i = 0;
F(i++, i++, i++);
F(z: i++, x: i++);
}
}
produces the output
x = 0, y = 1, z = 2
x = 4, y = -1, z = 3