C#是否有理由避免在属性设置器中重新分配值?

时间:2017-09-08 11:56:30

标签: c#

这是我在“遗留”代码中到处看到的模式,但现在没有人知道它的起源:

public virtual ICollection<SomeClass> SomeProperty
{
    get { return m_SomeProperty; }
    set
    {
        if (m_SomeProperty == value)
            return;
        m_SomeProperty = value;
    }
}

我的问题是,“if”检查的好处是什么?它可以简化为通常的

public virtual ICollection<SomeClass> SomeProperty
{
    get { return m_SomeProperty; }
    set { m_SomeProperty = value; }
}

没有任何副作用?

2 个答案:

答案 0 :(得分:4)

如果班级没有实施INotifyPropertyChanged

,那就没有多大意义

但是,如果,如果属性已更改,则应仅触发PropertyChanged event,而如果分配了相同的值,则不应触发https://nodejs.org/api/cli.html#cli_node_options_options。该链接包含一个示例。

答案 1 :(得分:0)

如果Target是私有字段,则无意义。更好的是使用自动属性:

m_SomeProperty

在这种情况下,所有出现的public virtual ICollection<SomeClass> SomeProperty { get; set; } 都应替换为m_SomeProperty

如果SomeProperty是属性本身,则可能产生副作用。在这种情况下,它可以有自己的setter,如果它的新值相同,则不应该触发它。