首页 > 解决方案 > 修改对象的 C# 静态方法

问题描述

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

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

我的问题是我必须返回结果还是已经修改到位?我可以将返回类型设为 void,然后遍历结果集合并像这样修改......

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

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

标签: c#static-methods

解决方案


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

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


推荐阅读