在Resharper 5中为C#分配建议之前的冗余条件检查

Kal*_*son 15 c# resharper getter setter properties

以下示例中的条件检查是否真的多余?:

public class MyClass     {
    public bool MyProperty { get; set; }

    public void DoSomething(bool newValue) {
        // R# says: redundant condition check before assignment
        // on the following line:
        if (MyProperty != newValue) { // <======
            MyProperty = newValue;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道任何一种方式MyProperty都会设置newValue,但检查是多余的?

在Adobe Flex中,即使没有进行显式检查,只要调用setter ,VM就会隐式调用getter.最终结果是在分配之前进行检查会导致两个检查,一个显式检查和一个隐式检查,从而导致冗余检查.在C#中有类似的事情吗?

Not*_*tMe 10

只有两种情况我见过这种检查.

第一种是当有一行额外的代码将对象的另一个属性设置为True以指示该对象已被修改.这通常在尝试决定是否将对象的状态持久化为类似数据库时使用.

第二种情况是有问题的类型是不可变的.您可能希望避免设置值,从而创建新字符串,例如,当值相同时.即使在那时,我也只在内存使用至关重要的某些应用中看到它.

  • 在我的例子中,它围绕着一个 Windows 窗体 `TopMost` 属性,它确实有副作用。关于不可变值的很好的观点。 (2认同)
  • 另一个用途是仅在值更改时更新 UI 元素。 (2认同)