C#修改对象的静态方法

Sea*_*n T 2 c# static-methods

想象一下这样的事情......

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)

还是我需要返回结果对象并重新分配?

Mar*_*ell 7

由于Result是一个,它目前在单个对象上进行了修改 - 基本上就地;这是按值传递引用。因此,这里没有返回值的意义。

如果Result是一个结构,你需要要么返回一个新值,使用(ref this Result result)(使得它擦肩而过,参考值); 请注意,编译器在这种情况下是宽松的,并允许在这种情况下ref隐式使用(ref通常需要在调用方和被调用方都显式)。