检查属性的更改和更新

本文关键字:更新 属性 检查 | 更新日期: 2023-09-27 17:54:23

在我们的代码库中有很多像

这样的代码
if (Some.Property != someValue)
{
    Some.Property = someValue;
}

Some.Property:

  1. 来自第三方库,不能更改
  2. 有昂贵的setter

我想重构它以使其更清晰。在c++中,我可以写一个宏UpdateIfChanged

除了为Some类编写扩展之外,是否有办法做到这一点,例如用泛型?

检查属性的更改和更新

为什么不根据需要使用通用方法呢?哪个代码是自己写的?

类似:

    public static void SetIfChanged<T>(ref T prop, T value)
    {
        if (object.Equals(prop, value) == false)
        {
            prop = value;
        }
    }

然后像这样使用:

SetIfChanged(ref someProp, someValue);

编辑v2 你的评论是正确的。

这个解决方案不是那么漂亮,但是有效:

    public static void SetIfChanged<T>(T value, T newValue, Action<T> action)
    {
        if (object.Equals(value, newValue) == false)
        {
            action(value);
        }
    }

用法:

SetIfChanged(t.ASDF, newVal, X => t.ASDF = newVal);