Friday, November 4, 2022

[FIXED] What exactly is the type of lambda expression with a body?

Issue

Windows forms extension method Invoke() doesn't accept a lambda expression, without us having to first typecast it to a delegate type like Action. This makes me wonder, if lambda expression (with a body) is not explicitly a delegate nor an expression, what is its type?


Solution

This makes me wonder, if lambda expression (with a body) is not explicitly a delegate nor an expression, what is its type?

It doesn't have a type in the normal sense of the word (i.e. a CLR type), just like null doesn't have a type. (Older versions of the C# specification had the concept of a "null type", but that was removed.)

Instead, it's an expression which is convertible to any compatible concrete delegate or expression tree type.

See section 7.1 of the C# 5 specification ("Expression Classification") for details - the relevant bullet points (out of the list of kinds of expression) are:

  • A null literal. An expression with this classification can be implicitly converted to a reference type or nullable type.
  • An anonymous function. An expression with this classification can be implicitly converted to a compatible delegate type or expression tree type.


Answered By - Jon Skeet
Answer Checked By - Marie Seifert (PHPFixing Admin)

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.