C#修改对象的静态方法

问题描述 投票:2回答:1

想象这样的事情...

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

或者我需要返回结果对象并重新分配?

c# static-methods
1个回答
5
投票

由于Resultclass,因此当前在单个对象上进行了修改-本质上是原地;这正在传递reference值。因此,这里没有返回值的点。

如果Result是一个结构,则需要任一返回一个新值,使用(ref this Result result)(使其通过引用传递值);请注意,在这种情况下,编译器比较宽松,并且允许ref在这种情况下隐式使用(ref通常在调用方和被调用方都必须是显式的)。

© www.soinside.com 2019 - 2024. All rights reserved.