空readonly Action委托

时间:2015-06-16 08:56:49

标签: c# .net

我们的代码中有许多地方使用() => {}(第三方库的方法中需要Action参数)。
为了使代码更清晰,我创建了以下类:

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

现在好多了:

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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