C# 静态方法修改一个对象

C# Static method modifying an object

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

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;
}

我的问题是我必须 return 结果还是已经修改过?我可以使 return 类型无效,然后遍历结果集合并像这样修改......

foreach (var result in results)
{
    result.SetPass();
}

或者我是否需要 return 结果对象并重新赋值?

因为Result是一个class,它目前是在单个对象上修改的——基本上就地修改;这是按值传递 reference。因此,这里没有 return 值。

如果 Resultstruct,您需要 return 一个新值,使用(ref this Result result)(使其通过引用传递一个值);请注意,编译器在这种情况下是宽松的,并允许在这种情况下隐式使用 refref 通常需要在调用方和被调用方都显式)。