No, expression trees are not language features. They can be used from any .NET language, so they cannot be C # specific. These are common CLR types defined in the built-in assembly.
The construction using lambda expressions (and LINQ) is specific to C #. But you can always create an equivalent Expression manually. The C # compiler itself does nothing but call calls to the well-known static methods of building Expression . You can verify that the compiler emitted by decompiling the binary with Reflector configured on the old version of .NET.
Whether expression trees are internal .NET Framework APIs is not a related issue, but I can't think of any reason they need it.
source share