2010-09-03 121 views
3

給定下面的代碼,將Bar(int y)中的方法參數y賦值爲x還是1?我意識到它們在邏輯上是等價的,但我想了解賦值操作。C#中的方法參數賦值

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foo = new Foo(); 
     var x = 0; 
     foo.Bar(x = 1); 
    } 
} 

public class Foo 
{ 
    public void Bar(int y) 
    { 
    } 
} 

回答

6

該參數獲取賦值的值。

考慮這樣的代碼:

int x = 0; 
int y = (x = 1); 
x = 42; 
foo.Bar(y); 

Eventhough x改變另一個時間,y仍包含1

+0

所有的好答案,但我發現這是最清晰和簡潔。標記爲答案。 – 2010-09-03 15:47:50

4

它分配給x=1其結果等於1

3

賦值操作符的結果將被傳遞給Bar,其中「是被分配到左側的值」(從Eric Lippert's blog)。

在這種情況下,即int1

0

()中的任何內容都會傳遞給y,只要它是一個int。

但是我覺得直接回答這個問題,X是實際被傳遞,而不是1,x等於1,則Y = X = 1。

+1

賦值的結果被傳遞,而不是'x'的值。 – bdukes 2010-09-03 15:40:29

1

您必須考慮評估順序。在調用函數之前,需要評估大括號內的任何表達式。然後將結果用作函數調用中的參數。

在你的情況下,x = 1是一個表達式。首先需要對它進行評估(x=1)然後您可以使用結果值x,並將其用作參數bar

它相當於

x = 1 
foo.bar(x) 

你可以看到,如果你看看x調用foo後的值,將進行評估。