protected override Expression VisitIEnumerable(IEnumerableCallSite callSite, CallSiteExpressionBuilderContext context) { if (callSite.ServiceCallSites.Length == 0) { return(Expression.Constant(ArrayEmptyMethodInfo .MakeGenericMethod(callSite.ItemType) .Invoke(obj: null, parameters: Array.Empty <object>()))); } return(Expression.NewArrayInit( callSite.ItemType, callSite.ServiceCallSites.Select(cs => Convert( VisitCallSite(cs, context), callSite.ItemType)))); }
protected override object VisitIEnumerable(IEnumerableCallSite enumerableCallSite, CallSiteFormatterContext argument) { argument.WriteProperty("itemType", enumerableCallSite.ItemType); argument.WriteProperty("size", enumerableCallSite.ServiceCallSites.Length); if (enumerableCallSite.ServiceCallSites.Length > 0) { argument.StartProperty("items"); CallSiteFormatterContext childContext = argument.StartArray(); foreach (ServiceCallSite item in enumerableCallSite.ServiceCallSites) { childContext.StartArrayItem(); VisitCallSite(item, childContext); } argument.EndArray(); } return(null); }
protected override Expression BuildIEnumerable(IEnumerableCallSite callSite) { return(Expression.NewArrayInit(callSite.ItemType, callSite.ServiceCallSites.Select(cs => Convert(Build(cs), callSite.ItemType)))); }
protected abstract TResult VisitIEnumerable(IEnumerableCallSite enumerableCallSite, TArgument argument);
protected abstract TResult BuildIEnumerable(IEnumerableCallSite enumerableCallSite);