[英]Are parameters evaluated in order when passed into a method?
參數在傳遞給方法時是否按順序進行評估?
對於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++];
}
這個樣本有效,但它只是運氣還是規則?
是的,作為方法的參數傳遞的表達式始終從左到右進行計算。
從C#4.0語言規范:
7.5.1.2參數列表的運行時評估
在函數成員調用(第7.5.4節)的運行時處理期間,參數列表的表達式或變量引用按從左到右的順序進行評估,[...]
正如其他人所指出的那樣,語言規范要求以從左到右的順序評估參數。
然而,完全公開,我們偶然而非故意在C#4.0中引入了一些錯誤,其中涉及命名參數,可選參數和ref遺漏參數的某些場景在調用遺留COM對象時,這樣在那些場景中參數的副作用可能無法嚴格按從左到右的順序進行評估。 處理這些功能之間的交互的分析器很復雜,並且存在一些錯誤。
我為錯誤道歉; 我們希望在下一個版本中修復它們。
從語言規范:
在函數成員調用的運行時處理期間,參數列表的表達式或變量引用按從左到右的順序進行計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.