c# – 我可以修改传递的方法参数

我的直觉是说我不应该做以下事情.我没有得到任何关于它的警告.

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
 }

出于某种原因,我总是像第二个例子那样处理传递的参数.
但是我不确定它是否真的很麻烦……也许这只是一个无所不在的代码.

我不认为调用方法将使用修改后的值.
任何人都有任何意见

对参数值的更改对调用者是不可见的,除非它是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();
}

有关详细信息,请参阅我的article on parameter passing.

翻译自:https://stackoverflow.com/questions/3991022/can-i-modify-a-passed-method-parameter

转载注明原文:c# – 我可以修改传递的方法参数