示例#1
0
        protected override TypeExpression DoResolveAsTypeStep(ParseContext parseContext)
        {
            if (ExpressionClass != ExpressionClass.Invalid)
            {
                return(this);
            }

            ExpressionClass = ExpressionClass.Type;

            if (!_typeArguments.Resolve(parseContext))
            {
                return(null);
            }

            _resolvedTypeParameters = _openType.GetGenericArguments();

            var resolvedTypes = _typeArguments.ResolvedTypes;

            if (resolvedTypes.Length != _resolvedTypeParameters.Length)
            {
                parseContext.ReportError(
                    CompilerErrors.InvalidNumberOfTypeArguments,
                    Span,
                    TypeManager.GetCSharpName(_openType),
                    TypeManager.GetNumberOfTypeArguments(_openType));

                return(null);
            }

            // Now bind the parameters
            Type = _openType.MakeGenericType(resolvedTypes);

            return(this);
        }
示例#2
0
        public override Expression DoResolve(ParseContext parseContext)
        {
            var targetResolved = Target.Resolve(
                parseContext,
                ResolveFlags.VariableOrValue | ResolveFlags.MethodGroup);

            if (targetResolved == null)
            {
                return(null);
            }

            Target = targetResolved;

            var arguments = Arguments;

            if (arguments != null)
            {
                _arguments.Resolve(parseContext);
            }

            _typeArguments.Resolve(parseContext);

            return(this);
        }