参数“角度”隐藏字段“float Utils.Transform.float”

本文关键字:float Utils Transform 隐藏 角度 参数 字段 | 更新日期: 2023-09-27 18:30:34

我是C#的新手,在理解此消息以及它如何引起问题时遇到了一点麻烦。在我安装 resharper 之前没有出现错误,所以我认为这只是糖语法错误?

public void SetTransform(float x, float y, float angle)
{
    SetTransform(x, y);
    this.angle = angle;
}

以及字段本身:

float angle;

我很困惑,方法中的参数怎么会隐藏字段变量?...

参数“角度”隐藏字段“float Utils.Transform.float”

这是一个警告,告诉您可能会混淆这两个变量:

class IDontKnow
{
    float angle;
    public void SetTransform(float x, float y, float angle) {
        SetTransform(x, y);
        this.angle = angle; // Its not really clear by the naked eye which angle is used.
    }
}

我建议使用下划线重命名字段角度,如下所示:

class IDontKnow
{
    float _angle;
    public void SetTransform(float x, float y, float angle) {
        SetTransform(x, y);
        _angle = angle; // using underscore as a prefix makes the use of this-keyword redundant.
    }
}

通常,您需要一些"明确"的命名约定,明确区分(受保护和更高范围的)字段和属性、方法参数和局部变量。这使代码更具可读性并避免上述警告。

看起来很清楚 - 你有一个名为 angle 的参数隐藏了类字段 ( this.angle

它不会引起任何问题,但是如果您有直接引用该字段的现有代码(而不是使用 this. ,那么它将改用参数值。

开始出现在Resharper中的原因是Resharper在警告这种情况方面做得更好;它不是无效代码,所以它不是编译器错误。