c# - 如果文本未更改,是否会触发 TextChanged 事件?

标签 c# winforms compiler-optimization

我正在为从其他来源购买的客户定制(和修复)大型应用程序。我们最终获得的代码肯定不是源客户端在生产中使用的实际代码。话虽如此,我今天遇到了这个:

if (lblCurrentValueOfContractAmount.Text == "0.0")
   lblCurrentValueOfContractAmount.Text = "0.0";

不,我不是在开玩笑。我的第一个想法是直接删除它,然后我开始与另一位开发人员交谈,他提到这里可能发生了一些 secret 的事情,比如有人订阅了标签的文本被更改等。老实说,我并不那么担心,所以我打算把它留在里面。但是,这让我想到了我的问题:

例如,假设有人订阅了 TextChanged。如果文本实际上没有改变,编译器会优化整个语句吗?该事件真的会触发吗?

最佳答案

假设您有一个 Winforms Label(或其他 Control 派生类),该代码不会触发更改事件,因此该代码没有副作用,可以删除。 http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Control.cs,9884211b7ff61817

        public virtual string Text {
        get { ... }

        set {
            if (value == null) {
                value = "";
            }

            if (value == Text) {
                return;
            }
            // omitted remainder
        }
    }

关于c# - 如果文本未更改,是否会触发 TextChanged 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29707036/

相关文章:

c# - AppBar中Button的绑定(bind)命令不起作用

c# - IEnumerable 到 Listview

c++ - 将 double 类型传递给 ceil 会导致 GCC 中不同优化级别的不同值

C++算法循环融合优化

c++ - 优化编译器如何决定何时以及展开多少循环?

c# - 如何获得 self 跟踪实体的主键?

c# - 如何将配置传递给 ASP.NET MVC6 中的非 Controller 类

c# - Linq on Entity Framework 与 SQL 存储过程的性能对比

c# - 让 Graphic 最初显示出来

c# - 如何更改DataGridView 中的列宽?