在我们的代码库中,我们有很多代码,比如
if (Some.Property != someValue)
{
Some.Property = someValue;
}
Some.Property
:
我想重构一下这个更清楚。在C ++中,我能够编写宏UpdateIfChanged
。
除了为Some
课程编写扩展程序之外,还有办法吗,例如与泛型?
答案 0 :(得分:3)
为什么不根据您的需要使用通用方法。这个代码本身就是哪个?
类似的东西:
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);