Пример #1
0
        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))));
        }
Пример #2
0
        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);
        }
Пример #3
0
 protected override Expression BuildIEnumerable(IEnumerableCallSite callSite)
 {
     return(Expression.NewArrayInit(callSite.ItemType, callSite.ServiceCallSites.Select(cs => Convert(Build(cs), callSite.ItemType))));
 }
Пример #4
0
 protected abstract TResult VisitIEnumerable(IEnumerableCallSite enumerableCallSite, TArgument argument);
Пример #5
0
 protected abstract TResult BuildIEnumerable(IEnumerableCallSite enumerableCallSite);