Регулярное выражение для изменения синтаксиса делегата на лямбда-выражение? - PullRequest
1 голос
/ 31 июля 2009

У меня есть метод, который был объявлен так:

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

ItemClickEventHandler имеет обычные (отправитель, e) аргументы. Однако мы никогда не заканчивали тем, что использовали аргументы (sender, e), поэтому у нас есть несколько таких вызовов:

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

и, поскольку этот проект был обновлен до .NET 3.5 примерно на 15%, многие вызовы, подобные этому:

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

Мы часто называем этот метод, поэтому действительно раздражает необходимость снова и снова добавлять лямбду для неиспользуемых аргументов. Поэтому я хочу изменить все использования на эту перегрузку:

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

Что позволяет нам сделать это вместо:

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

Проблема заключается в том, что для использования старого синтаксиса делегата потребуется преобразование в (Action), поскольку они неоднозначны для компилятора. Итак, чтобы снять раздражение, я хочу найти и заменить, предположительно, регулярными выражениями.

Какое регулярное выражение для этого?

1 Ответ

1 голос
/ 31 июля 2009

К сожалению, вам будет очень трудно найти регулярное выражение, которое выполнит свою работу. Чтобы правильно сопоставить выражение делегата в C #, механизм регулярных выражений должен поддерживать понятие рекурсии из-за соответствующего сопоставления скобок. Даже с рекурсией, такие регулярные выражения обычно довольно трудно понять правильно.

В зависимости от размера вашего проекта, может быть достаточно просто внести изменения и позволить функциям делегатов превратиться в ошибку компиляции и быстро их исправить. Это раздражает, но, вероятно, будет быстрее и точнее, чем пытаться определить правильную замену регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...