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

为Resharper 5中的C#提供分配建议之前的冗余条件检查,c#,properties,resharper,setter,getter,C#,Properties,Resharper,Setter,Getter,在以下示例中,条件检查真的是多余的吗 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 (MyPrope

在以下示例中,条件检查真的是多余的吗

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;
        }
    }
}
公共类MyClass{
公共bool MyProperty{get;set;}
公共无效DoSomething(bool newValue){
//R#表示:分配前检查冗余条件
//在以下行:

如果(MyProperty!=newValue){//我会说检查是多余的。如果您有一个的实现,这会更有意义,但是如果没有进行实际更改,检查将在setter中进行,以避免触发事件。

我只见过两种情况

第一种情况是,有一行额外的代码将对象的另一个属性设置为True,以指示该对象已被修改。这通常用于尝试决定是否将对象的状态持久化到数据库之类的对象


第二种情况是,所讨论的类型是不可变的。例如,当值相同时,您可能希望避免设置值,从而创建新字符串。即使如此,我也只在某些内存使用非常关键的应用程序中见过它。

在这种特定情况下,它在逻辑上是多余的,因为没有代码b在getter中执行-只是一个围绕私有字段的直接包装器。如果你习惯于在getter中放入有副作用的内容,我会说禁用R#警告


可能值得尝试在属性的getter中添加一些内容,看看ReSharper是否仍然认为它是多余的。如果它认为是多余的,那么我将称之为R#bug。

如果(
MyProperty!=newValue
)是多余的,离开该行将产生相同的结果

在我的例子中,它围绕着一个windows forms
最顶层的
属性,该属性确实有副作用。关于不可变值有很多优点。另一个用途是仅在值更改时更新UI元素。我将属性更改为
int
,并增加了值I吸气剂和我仍然看到相同的建议,所以我会认为它是一个ReSalpBug。很好知道,谢谢-我会保持我的眼睛,在我的东西的情景。