C# · 12月 29, 2021

c# – 如果分配了相同的值,setter是否立即返回?

在实现INotifyPropertyChanged的类中,我经常看到这种模式: public string FirstName { get { return _customer.FirstName; } set { if (value == _customer.FirstName) return; _customer.FirstName = value; base.OnPropertyChanged(“FirstName”); } }

精确的线条

if (value == _customer.FirstName) return;

困扰我我经常这样做,但我不确定它是否需要也不好.毕竟,如果一个调用者分配了相同的值,我不想重新分配该字段,特别是通知我的订阅者该属性已经改变,在语义上它没有.

除了节省一些cpu / RAM / etc,通过释放UI来更新可能在屏幕上看起来相同的东西/ whatever_medium我们获得什么?

有些人可以通过重新分配对物业的同样价值来强制更新(不过这不是一个很好的做法吗?)

我们应该做还是不应该呢?

为什么?

解决方法 是的,您应该在消费者设置的属性值等于已经持久化的值时立即返回.

首先,没有理由浪费物业的任何时间或资源 – 价值已经确定,所以不需要进一步的行动.另外,如果存储在属性的后备字段中的值没有改变,那么您应该永远不要调用OnPropertyChanged – 当调用该属性的setter时更改该值时,该方法将被引发.

然而,所有这一切 – 如果设定者没有打电话给OnPropertyChanged我不会打扰检查的价值.在一个简单的setter的情况下,只设置后备字段的值,没有别的,它实际上会更快地总是设置值而不是首先检查然后设置值.只有当该属性的setter具有不应该触发的附加逻辑或可能引起不必要的性能损失时,才使用此模式.