传递给方法时参数的顺序是否被评估?
参数是否按照顺序进行评估?
对于Java来说,它总是如此,对C来说不是,但C#的答案是什么?
样品
string.Format("byte1={0} byte2={1} byte3={2}", getNextByte(), getNextByte(), getNextByte()); int pos=0; byte[] arr=new byte[] {1,2,3,4,5,6}; byte getNextByte() { return arr[pos++]; }
这个样本有效,但是这只是运气还是一个规则?
是的,作为parameter passing给方法的expression式总是从左到右进行计算。
从C#4.0语言规范:
7.5.1.2参数列表的运行时评估
在函数成员调用(第7.5.4节)的运行时处理过程中,参数列表的expression式或variables引用按从左到右的顺序进行评估,
正如其他人所指出的那样,语言规范要求参数按照从左到右的顺序进行评估。
但是,我们意外地发现了一些C#4.0中的一些错误,其中一些涉及命名参数,可选参数以及在遗留COM对象调用中被忽略的参数的某些情况,使得在这些情况下,参数的副作用可能不会严格按照从左至右的顺序进行评估。 处理这些function之间的交互的分析器是复杂的,它有一些错误。
我为错误道歉; 我们希望能在下一个版本中修复它们。
从语言规范:
在函数成员调用的运行时处理过程中,参数列表的expression式或variables引用按从左到右的顺序进行评估。