ExpressionTreeToString icon indicating copy to clipboard operation
ExpressionTreeToString copied to clipboard

Factory methods renderer: Dynamic binder arguments render as binder instance

Open zspitz opened this issue 5 years ago • 0 comments

Whenever the underlying RenderLiteral function encounters something it cannot render, it returns #<typename>, e.g. #CSharpInvokeMemberBinder.

Since these are very much a part of constructing dynamic expressions, it would provide value if instead of this:

// using System.Linq.Expressions.Expression

Dynamic(
    #CSharpInvokeMemberBinder,
    typeof(object), new[] { obj }
)

we could return something like this:

// using System.Linq.Expressions.Expression;
// using static Microsoft.CSharp.RuntimeBinder.Binder;

Dynamic(
    InvokeMember(flags, "Method", new Type[] { }, context, argInfos),
    typeof(object), new[] { obj }
)

Some thoughts:

  • I would want RenderLiteral to allow for extensible behavior. In other words, not every place we use RenderLiteral do we want to return a literal for binders.
  • Particularly since this is only the C# binders; each additional language may have other binders.

zspitz avatar Sep 22 '20 19:09 zspitz