public override Type Resolve(TypeResolutionService service)
        {
            var named = service.Symbol as INamedTypeSymbol;

            var unboundType = service.Resolve(named.ConstructUnboundGenericType());
            var arguments = named.TypeArguments.Select(service.Resolve).ToArray();

            if (arguments.Length != named.Arity)
            {
                throw new Exception("Не удалось разрешить все типы аргументов обобщенного типа");
            }

            return unboundType.MakeGenericType(arguments);
        }
        /// <summary>
        /// –азрешение типа на основе его описани¤ в синтаксическом дереве
        /// </summary>
        /// <param name="service"> онтекст разрешени¤ типа</param>
        public override Type Resolve(TypeResolutionService service)
        {
            var properties = new Dictionary<string, Type>();
            foreach (var member in service.Symbol.GetMembers())
            {
                var property = member as IPropertySymbol;
                if (property == null)
                {
                    continue;
                }

                var propertyType = service.Resolve(property.Type);
                var propertyName = property.Name;

                properties[propertyName] = propertyType;
            }

            return AnonymousTypeBuilder.Build(properties);
        }
Пример #3
0
 /// <summary>
 /// Разрешение типа на основе его описания в синтаксическом дереве
 /// </summary>
 /// <param name="service">Контекст разрешения типа</param>
 public override Type Resolve(TypeResolutionService service)
 {
     var arrayType = service.Symbol as IArrayTypeSymbol;
     var itemType = service.Resolve(arrayType.ElementType);
     return itemType.MakeArrayType();
 }