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

时间:2014-11-14 20:09:10

标签: c#

我是一个相对较新的C#,在理解这条消息时遇到一些麻烦,以及它是如何导致问题的。在我安装resharper之前没有显示错误,所以我认为它只是糖语法错误?

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

该领域本身:

float angle;

我很困惑,方法中的参数如何隐藏字段变量?...

2 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:3)

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

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

它开始出现Resharper的原因是因为Resharper更好地警告这些案件;它不是无效的代码,因此它不是编译器错误。