I am sorry that this upsets you, but this choice was made consciously by a team of language developers. Code that evaluates whether a given extension method is valid requires the receiver to be of a clear type, and lambda expressions not of type.
There was some debate on this, but it was ultimately decided that (1) the proposed function is potentially confusing or error prone if countless expressions, such as lambdas, method groups and null literals, become receivers of extension methods and (2) the proposed function not at all needed for LINQ to work. We were very limited in our schedules when implementing C # 3 and everything that was not necessary to reduce LINQ work. It was much easier to develop, implement, and test the "do not allow lambda as receivers" function, rather than consider all potentially odd cases where a lambda group, a method group, or zero were used as a receiver.
As others have said, you can just lay in a lambda or put it in a variable, and then use the variable as the receiver.
Alternatively, as you noticed, you might consider using float as a receiver in your specific example.
source share