C# 正在检查属性以进行更改和更新

C# 正在检查属性以进行更改和更新,c#,C#,在我们的代码库中,我们有很多类似 if (Some.Property != someValue) { Some.Property = someValue; } Some.Property: 来自第三方库,无法更改 他有昂贵的二传手 我想重构它,让它更清晰。在C++中,我能够编写宏 UpDeaIfTrime< /Cord> 除了为某些类编写扩展(例如使用泛型)之外,还有其他方法可以做到这一点吗?为什么不根据需要使用泛型方法呢。这段代码是哪一个独立的 比如: public stat

在我们的代码库中,我们有很多类似

if (Some.Property != someValue)
{
    Some.Property = someValue;
}
Some.Property

  • 来自第三方库,无法更改
  • 他有昂贵的二传手
  • 我想重构它,让它更清晰。在C++中,我能够编写宏<代码> UpDeaIfTrime< /Cord>
    除了为
    某些
    类编写扩展(例如使用泛型)之外,还有其他方法可以做到这一点吗?

    为什么不根据需要使用泛型方法呢。这段代码是哪一个独立的

    比如:

        public static void SetIfChanged<T>(ref T prop, T value)
        {
            if (object.Equals(prop, value) == false)
            {
                prop = value;
            }
        }
    
    编辑v2 你的评论是正确的。这不适用于属性

    这个解决方案并不漂亮,但很有效:

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

    你说的是数据绑定吗?不,它实际上是office的插件。我看到两种选择,要么你创建一组扩展方法,也许其中一种需要一个指向你想要更改的属性的lamdba。然后您可以有一个通用扩展。另一个选项是使用decorator模式,然后您可以将第三方类隐藏在自己的接口内或其他任何地方。在那里你可以隐藏所有的支票。这就是我第一次尝试的。someProp必须是变量才能工作。object.Equals(value,newValue)将为false,因为您将尝试比较操作和T@kilotaras你又抓住我了。我确实修好了。但老实说,当我看代码时,我会坚持使用if语句。我也会这么做。我希望有一个像C++ +>代码>优雅的东西,如果(a,!)b(a=b){a= b;} < /c> > kktasARas,我们定义了更新(a,b):我们谈论了多少属性?也许扩展方法可能是更优雅的方式!
        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);