想象一下这样的事情...
public class Result
{
public string Name {get; set;}
public int Score {get; set;}
public bool Pass {get; set;}
}
还有一个静态方法...
public static Result SetPass(this Result result)
{
result.Pass = result.Score > 50;
return result;
}
我的问题是我是否必须返回结果或它已经修改到位?我可以使返回类型无效,然后遍历一组结果并像这样就地修改吗......
foreach (var result in results)
{
result.SetPass();
}
还是需要返回结果对象并重新分配?
由于Result
是一个类,因此它目前在单个对象上被修改 - 基本上是就地的;这是按值传递引用。因此,在这里使用返回值是没有意义的。
如果Result
是一个结构体,则需要返回一个新值,或者使用(ref this Result result)
(使其按引用传递值(;请注意,编译器在这种情况下是宽松的,并允许在这种情况下隐式使用ref
(ref
通常需要在调用方和被调用方都显式使用(。