改变方法中的属性

Mutating properties in methods

我有这些属性:

private float colorR;
private float colorG;
private float colorB;

public static float defaultInc = 0.001f;

private float addR = defaultInc;
private float addG = defaultInc;
private float addB = defaultInc;

在我的更新方法中,我正在执行以下操作:

void Update()
{

    if (colorR + addR > 1.0f) {
        addR = addR * -1;
    } else if (colorR + addR < 0.0f) {
        addR = defaultInc;
    }
    colorR += addR;

    if (colorG + addG > 1.0f) {
        addG = addG * -1;
    } else if (colorG + addG < 0.0f) {
        addG = defaultInc;
    }
    colorG += addG;

    if (colorB + addB > 1.0f) {
        addB = addB * -1;
    } else if (colorB + addB < 0.0f) {
        addB = defaultInc;
    }
    colorB += addB;

    setColor();
    
}

如您所见,我对 6 个不同的属性执行了 3 次相同的计算。我的问题是,我如何重构它以便它使用一种或两种方法来更新属性,而不是重复我自己。我尝试将属性传递给一个方法并在那里改变它们,但是方法范围阻止了它。

您可以使用 ref:

通过引用传递
void Update(ref float color, ref float add)
{
    if (color + add > 1.0f)
    {
        add = add * -1;
    }
    else if (color + add < 0.0f)
    {
        add = defaultInc;
    }
    color += add;
}

void Update()
{
    Update(ref colorR, ref addR);
    Update(ref colorG, ref addG);
    Update(ref colorB, ref addB);
}

因为每个字段都是通过引用传递的,所以该方法可以直接更新它们。