![](/img/trans.png)
[英]How can i get the parameter values of an anonymous method passed as a func?
[英]Can I modify a passed method parameter
我的直覺告訴我不應該做以下事情。 我沒有收到任何警告。
void test(DateTime d)
{
d = d.AddDays(2);
//do some thing with d
}
或者這更合適
void test(DateTime d)
{
DateTime _d = d.AddDays(1);
//do some thing with _d
}
出於某種原因,我總是像在第二個示例中那樣處理傳遞的參數。 但我不確定它是否真的是 nessesry ......也許它只是 unnessary 代碼。
我不認為調用方法會使用修改后的值。 任何人有任何意見
對參數值的更改對調用者是不可見的,除非它是ref
或out
參數。
這是不是這樣的,如果你改變一個引用類型的對象由參數引用。 例如:
public void Foo(StringBuilder b)
{
// Changes the value of the parameter (b) - not seen by caller
b = new StringBuilder();
}
public void Bar(StringBuilder b)
{
// Changes the contents of the StringBuilder referred to by b's value -
// this will be seen by the caller
b.Append("Hello");
}
最后,如果通過引用傳遞參數,則可以看到更改:
public void Baz(ref StringBuilder b)
{
// This change *will* be seen
b = new StringBuilder();
}
有關更多信息,請參閱我關於參數傳遞的文章。
您可以更改它,但更改不會返回給調用者。
如果是ValueType -> 發送對象的副本
如果是ReferenceType -> 對象引用的副本將按值發送。 通過這種方式,可以更改對象的屬性,但不能更改引用本身 - 調用者無論如何都不會看到更改。
如果發送ref
-> 可以更改引用。
在 C++ 中,您可以使用const
來防止更改,但 C# 沒有。 這只是為了防止程序員錯誤地嘗試更改它 - 取決於使用const
位置。
如果您希望能夠訪問原始值,請使用第二種方法。
如果你不關心原始值,你可以使用任何一個(不過我可能仍然使用第二個)。
無論哪種方式,在這種情況下,您都不會損害其他任何人的值(即使您重新分配該值,它也不會返回給調用者)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.