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); }
/// <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(); }