使用赋值作为表达式是一种好的做法吗?

本文关键字:一种 赋值 表达式 | 更新日期: 2023-09-27 18:02:36

这在c# .Net中会被认为是不好的做法吗?

public T CurrentValue {
        get {
            return current;
        }
        protected set {
            AnimationUpdated(new AnimationChangedEventArgs(current = value));
        }
    }

使用赋值作为表达式是一种好的做法吗?

假设T在这个范围内是有效的,并且current被声明为类型T,这将工作,但我将把赋值移到它自己的行。

这是一件小事,但我觉得它使它更易于阅读。我将变量赋值排除在方法调用之外。IT还显示了做两件事的意图。

在我工作的地方,这是不好的做法。

public T CurrentValue {
    get {
        return current;
    }
    protected set {
        current = value;
        AnimationUpdated(new AnimationChangedEventArgs(current));
    }
}

从技术上讲,这在语法上是有效的(c#在这方面遵循C -一个"简单"的赋值也是一个表达式),但它令人困惑。首先,它看起来太像"=="了(事实上,人们一开始可能会认为这就是你想要做的);也很容易忽略赋值正在发生的事实,因为你通常不会期望它在那里发生。

我同意TychonOmega的观点,但是,我看到您试图在值发生变化时引发事件。也许你应该考虑使用一个Observable类型,而不是这样做。看看这些文章:

https://msdn.microsoft.com/en-us/library/system.reactive.linq.observable (v = vs.103) . aspx

https://msdn.microsoft.com/en-us/library/dd990377 (v = vs.110) . aspx