空的只读操作委托

本文关键字:操作 只读 | 更新日期: 2023-09-27 17:56:32

在我们的代码中有很多地方使用了() => {}(在第三方库的方法中Action参数是必需的)。
为了使代码更简洁,我创建了以下类:

public static class Empty
{
    public static readonly Action Action = () => {};
}

现在它更好了:

Alert.Show(title, message, Empty.Action);

问题是这种重构会导致任何问题吗?我确定没有,但你可能知道可能的副作用。或者您可能知道这里更好的代码改进?

空的只读操作委托

这种变化在技术上是可以观察到的:总是有可能某些代码间接比较两个new Action(() => {})实例的相等性,并且它们以前不会比较相等,现在它们这样做了。

例如,如果您公开了一个public event Action X;,则可以确保将其初始化为() => {}以确保它永远不会null,并从代码中删除任何null检查。如果将其更改为 Empty.Action ,则恶意代码可能会写入X -= Empty.Action;,从而导致您自己的代码中NullReferenceException事件被调用。

但是在编写良好的代码中,重构应该没有任何区别。

这不会引起任何问题,因为它等效于定义静态方法并在程序集中多次引用它