检查属性的更改和更新
本文关键字:更新 属性 检查 | 更新日期: 2023-09-27 17:54:23
在我们的代码库中有很多像
这样的代码if (Some.Property != someValue)
{
Some.Property = someValue;
}
Some.Property
:
- 来自第三方库,不能更改
- 有昂贵的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);