I completely agree with Roshan on how the so called anonmyous methods are implemented in C# 2.0. In his post, Roshan shows how C# compiler deals with closures so refer to that post for details.
However current anonymous methods implementation may be not so efficient in the real world because whenever you close a local variable into an anonymous method you pay the definition of a class into the runtime. In a scenario where closures are used extensively you may have unneeded overhead due to over-allocation of EEClasses into the runtime and JITting. Besides, using CLR closures instead you would save the definition of a class for each anonymous method reducing the number of classes introduced by the program. Moreover the implementation of the compiler would be more straightforward.
I guess that C# implemented anonymous methods before CLR closures were available and thus they cannot relay on this new mechanism. Nevertheless I hope that some day the C# compiler would change the compilation schema in favor of the newer mechanism.