Action
не является Expression
; это просто делегат (который мог быть выражением в какой-то момент, мог быть лямбда-выражением, а может и не быть).
Чтобы сделать это работоспособным, вам потребуется рефакторинг:
public void Something(Expression<Action> action) {...}
Кроме того, лямбда-выражения C # 3.0 / .NET 3.5 не очень хорошо работают для выражений Action
-типа. Вы очень ограничены в том, что вы можете выразить. Func
выражения типа работают лучше. В .NET 4.0 (CTP) здесь гораздо больше гибкости , хотя все еще не ясно, что язык (C # 4.0) будет предлагать в виде лямбд.
В принципе, я не уверен, что вы можете (удобно) делать то, что вы надеетесь, используя Expression
.