<PackageReference Include="Microsoft.CSharp" Version="4.4.1" />

CSharpInvokeMemberBinder

using System; using System.Collections.Generic; using System.Dynamic; namespace Microsoft.CSharp.RuntimeBinder { internal sealed class CSharpInvokeMemberBinder : InvokeMemberBinder, ICSharpInvokeOrInvokeMemberBinder { private CSharpCallFlags _flags; private Type _callingContext; private List<Type> _typeArguments; private List<CSharpArgumentInfo> _argumentInfo; private RuntimeBinder _binder; bool ICSharpInvokeOrInvokeMemberBinder.StaticCall { get { if (_argumentInfo[0] != null) return _argumentInfo[0].IsStaticType; return false; } } CSharpCallFlags ICSharpInvokeOrInvokeMemberBinder.Flags { get { return _flags; } } Type ICSharpInvokeOrInvokeMemberBinder.CallingContext { get { return _callingContext; } } IList<Type> ICSharpInvokeOrInvokeMemberBinder.TypeArguments { get { return _typeArguments.AsReadOnly(); } } IList<CSharpArgumentInfo> ICSharpInvokeOrInvokeMemberBinder.ArgumentInfo { get { return _argumentInfo.AsReadOnly(); } } bool ICSharpInvokeOrInvokeMemberBinder.ResultDiscarded { get { return (_flags & CSharpCallFlags.ResultDiscarded) != CSharpCallFlags.None; } } public CSharpInvokeMemberBinder(CSharpCallFlags flags, string name, Type callingContext, IEnumerable<Type> typeArguments, IEnumerable<CSharpArgumentInfo> argumentInfo) : base(name, false, BinderHelper.CreateCallInfo(argumentInfo, 1)) { _flags = flags; _callingContext = callingContext; _typeArguments = BinderHelper.ToList(typeArguments); _argumentInfo = BinderHelper.ToList(argumentInfo); _binder = RuntimeBinder.GetInstance(); } public override DynamicMetaObject FallbackInvokeMember(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { return BinderHelper.Bind(this, _binder, BinderHelper.Cons(target, args), _argumentInfo, errorSuggestion); } public override DynamicMetaObject FallbackInvoke(DynamicMetaObject target, DynamicMetaObject[] args, DynamicMetaObject errorSuggestion) { CSharpInvokeBinder cSharpInvokeBinder = new CSharpInvokeBinder(_flags, _callingContext, _argumentInfo); return cSharpInvokeBinder.Defer(target, args); } string get_Name() { return base.Name; } string ICSharpInvokeOrInvokeMemberBinder.get_Name() { return this.get_Name(); } } }