ICSharpCode.NRefactory.CSharp.Resolver.LambdaResolveResult.GetInferredReturnType C# (CSharp) 메소드

GetInferredReturnType() 공개 추상적인 메소드

Gets the return type inferred when the parameter types are inferred to be parameterTypes
This method determines the return type inferred from the lambda body, which is used as part of C# type inference. Use the ReturnType property to retrieve the actual return type as determined by the target delegate type.
public abstract GetInferredReturnType ( IType parameterTypes ) : IType
parameterTypes IType
리턴 IType
		public abstract IType GetInferredReturnType(IType[] parameterTypes);
		

Usage Example

예제 #1
0
        /// <summary>
        /// Gets the better conversion (C# 4.0 spec, §7.5.3.3)
        /// </summary>
        /// <returns>0 = neither is better; 1 = t1 is better; 2 = t2 is better</returns>
        public int BetterConversion(ResolveResult resolveResult, IType t1, IType t2)
        {
            LambdaResolveResult lambda = resolveResult as LambdaResolveResult;

            if (lambda != null)
            {
                if (!lambda.IsAnonymousMethod)
                {
                    t1 = UnpackExpressionTreeType(t1);
                    t2 = UnpackExpressionTreeType(t2);
                }
                IMethod m1 = t1.GetDelegateInvokeMethod();
                IMethod m2 = t2.GetDelegateInvokeMethod();
                if (m1 == null || m2 == null)
                {
                    return(0);
                }
                int r = BetterConversionTarget(t1, t2);
                if (r != 0)
                {
                    return(r);
                }
                if (m1.Parameters.Count != m2.Parameters.Count)
                {
                    return(0);
                }
                IType[] parameterTypes = new IType[m1.Parameters.Count];
                for (int i = 0; i < parameterTypes.Length; i++)
                {
                    parameterTypes[i] = m1.Parameters[i].Type.Resolve(context);
                    if (!parameterTypes[i].Equals(m2.Parameters[i].Type.Resolve(context)))
                    {
                        return(0);
                    }
                }
                if (lambda.HasParameterList && parameterTypes.Length != lambda.Parameters.Count)
                {
                    return(0);
                }

                IType ret1 = m1.ReturnType.Resolve(context);
                IType ret2 = m2.ReturnType.Resolve(context);
                if (ret1.Kind == TypeKind.Void && ret2.Kind != TypeKind.Void)
                {
                    return(1);
                }
                if (ret1.Kind != TypeKind.Void && ret2.Kind == TypeKind.Void)
                {
                    return(2);
                }

                IType inferredRet = lambda.GetInferredReturnType(parameterTypes);
                return(BetterConversion(inferredRet, ret1, ret2));
            }
            else
            {
                return(BetterConversion(resolveResult.Type, t1, t2));
            }
        }
All Usage Examples Of ICSharpCode.NRefactory.CSharp.Resolver.LambdaResolveResult::GetInferredReturnType