[c#] 修改方法內的方法參數或返回結果


Answers

返回一個值。

為什麼?

正確性,可讀性和自我文檔

故意和易於理解的代碼比副作用代碼好。 考慮:

float area = pi * Square(r);

Square(r);
float area = pi * r;
// ... intervening code
float x = r * 5;  // did you mean to use the original r or r-squared here?

在第一個例子中還要考慮通過可組合性的簡潔性的優點。

考慮這些方法本身,比較一下:

int DoSomething(int value)
   { return value+1; }

這顯然是正確的。 與

void DoSomething(int value)
   { value++; }

這似乎是正確的,將編譯得很好,但實際上只是一個沒有操作。 你真正想要的是這樣的:

void DoSomething(ref int value)
   { value++; }

// client code:
DoSomething(ref a);

變量很便宜

許多有名的變量比少數重用的通用變量更可取。 抵製過早優化的誘惑,你需要減少局部變量的數量以提高系統性能的機會在很小的程度上是微不足道的。 再次,變量是便宜的,不要重複使用變量!

可測性

考慮:

Assert.IsTrue(Square(2) == 4);

float a = 2;
Square(a);
Assert.IsTrue(a == 4);

避免突變優先返回值還有許多其他優點。 數學將函數定義為輸入值到輸出值的映射不僅僅是一種偶然事件。

Question

有什麼區別

private void DoSomething(int value) {
    value++;
}

private int DoSomething(int value) {
   return value++;
}

當用作任一

DoSomething(value);

value = DoSomething(value);



對於大多數編程語言,您需要通過參考傳遞參數來更改void函數。 一個函數通常不能改變其參數的值; 相反,它會創建一個參數的副本並與之協同工作。

為了處理實際的變量,你必須改變函數頭來接受一個變量的引用,前面的和號(&)就像這樣:

private void DoSomething(int &value)

希望有所幫助!




簡單地說,第一個不會工作,因為您正在使用價值副本。

你可以做類似的事情

private int DoSomething(ref int value)
{
  value++;
}

並稱之為

DoSomething(ref value);

這改變了要通過引用傳遞的值。 但真正做到這一點的唯一理由是,如果你想從你的函數返回多個不同的東西。 通常有更好的方法。

為了獲得額外的獎勵知識,還有out關鍵字與ref相似,但不要求首先初始化值。




Related



Tags

c# c#   .net .net