示例#1
0
        static public ParamsPriority GetParamsPriority(Type t1, Type t2)
        {
            ParamsPriority paramsPriority;

            if ((paramsPriority = IsComplete(t1, t2)) != null)
            {
                return(paramsPriority);
            }

            var implicitCastPriority = IsImplicitCast(t1, t2);

            if (implicitCastPriority != 0)
            {
                paramsPriority = new ParamsPriority();
                paramsPriority.implicitCastPriority = implicitCastPriority;
                paramsPriority.matchkind            = ParamsPriority.MatchKind.ImplicitCastMatch;
                return(paramsPriority);
            }


            var upCastNest = IsUpCast(t1, t2);

            if (upCastNest != 0)
            {
                paramsPriority            = new ParamsPriority();
                paramsPriority.upCastNest = upCastNest;
                paramsPriority.matchkind  = ParamsPriority.MatchKind.UpCastMatch;
                return(paramsPriority);
            }
            var concreteness = IsGeneric(t1, t2);

            if (concreteness != 0)
            {
                paramsPriority              = new ParamsPriority();
                paramsPriority.matchkind    = ParamsPriority.MatchKind.GenericTypeMatch;
                paramsPriority.concreteness = concreteness;
                return(paramsPriority);
            }
            var genericUpCastInfo = GetGenericUpCastInfo(t1, t2);

            if (genericUpCastInfo != null)
            {
                paramsPriority            = new ParamsPriority();
                paramsPriority.upCastNest =
                    genericUpCastInfo.Value.upCastNest;
                paramsPriority.matchkind =
                    ParamsPriority.MatchKind.GenericTypeUpCastMatch;
                return(paramsPriority);
            }

            if (t2 == typeof(object))
            {
                paramsPriority           = new ParamsPriority();
                paramsPriority.matchkind =
                    ParamsPriority.MatchKind.ObjectMatch;
                return(paramsPriority);
            }

            return(null);
        }
示例#2
0
 //型が等しかったらtrue
 static public ParamsPriority IsComplete(Type t1, Type t2)
 {
     if (t1 == t2)
     {
         var paramsPriority = new ParamsPriority();
         paramsPriority.matchkind = ParamsPriority.MatchKind.TypeMatch;
         return(paramsPriority);
     }
     return(null);
 }