正则表达式将委托语法更改为Lambda表达式?

时间:2009-07-31 03:28:07

标签: c# regex

我有一个声明如下的方法:

public ButtonObject CreateStandardButton(type1 arg1, type2 arg2, 
                         ItemClickEventHandler eventHandler, type3 arg3, type4 arg4)

ItemClickEventHandler具有通常的(sender,e)参数。但是,我们从未最终使用(sender,e)参数,所以我们有一堆这样的调用:

myButton = CreateStandardButton(myArg1, myArg2, 
                (sender, e) => MyButtonClick(), myArg3, myArg4);

并且,因为这个项目大约有15%被升级到.NET 3.5,所以许多调用都是这样的:

myButton = CreateStandardButton(myArg1, myArg2, 
                delegate { MyButtonClick(); }, myArg3, myArg4);

我们经常调用这个方法,所以不得不一遍又一遍地为未使用的参数添加lambda。因此,我想将所有用法更改为此重载:

public ButtonObject CreateStandardButton(type1 arg1, type2 arg2, 
                         Action eventHandler, type3 arg3, type4 arg4)

这允许我们这样做:

myButton = CreateStandardButton(myArg1, myArg2, 
                MyButtonClick, myArg3, myArg4);

问题是旧委托语法的使用需要转换为(Action),因为它们对编译器不明确。所以,为了消除烦恼,我想做一个查找和替换,大概是正则表达式。

这样做的正则表达式是什么?

1 个答案:

答案 0 :(得分:1)

不幸的是,你很难找到能够完成工作的正则表达式。为了正确匹配C#中的委托表达式,正则表达式引擎必须支持递归的概念,因为涉及的括号匹配。即使有递归,这样的正则表达通常也很难做到。

根据项目的大小,可能很快就可以进行更改并让委托函数变成编译错误并快速修复它们。这很烦人,但可能比尝试定义正确的正则表达式替换更快更准确。