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