int IComparer.Compare(object m1, object m2) { var me1 = (MethodBase)m1; var me2 = (MethodBase)m2; if (me1.DeclaringType != me2.DeclaringType) { // m2's type derives from m1's type, favor m2 if (me1.DeclaringType.IsAssignableFrom(me2.DeclaringType)) { return(1); } // m1's type derives from m2's type, favor m1 if (me2.DeclaringType.IsAssignableFrom(me1.DeclaringType)) { return(-1); } } int p1 = MethodBinder.GetPrecedence((MethodBase)m1); int p2 = MethodBinder.GetPrecedence((MethodBase)m2); if (p1 < p2) { return(-1); } if (p1 > p2) { return(1); } return(0); }
int IComparer.Compare(object m1, object m2) { int p1 = MethodBinder.GetPrecedence((MethodBase)m1); int p2 = MethodBinder.GetPrecedence((MethodBase)m2); if (p1 < p2) { return(-1); } if (p1 > p2) { return(1); } return(0); }
int IComparer <MaybeMethodBase> .Compare(MaybeMethodBase m1, MaybeMethodBase m2) { MethodBase me1 = m1.UnsafeValue; MethodBase me2 = m2.UnsafeValue; if (me1 == null && me2 == null) { return(0); } else if (me1 == null) { return(-1); } else if (me2 == null) { return(1); } if (me1.DeclaringType != me2.DeclaringType) { // m2's type derives from m1's type, favor m2 if (me1.DeclaringType.IsAssignableFrom(me2.DeclaringType)) { return(1); } // m1's type derives from m2's type, favor m1 if (me2.DeclaringType.IsAssignableFrom(me1.DeclaringType)) { return(-1); } } int p1 = MethodBinder.GetPrecedence(me1); int p2 = MethodBinder.GetPrecedence(me2); if (p1 < p2) { return(-1); } if (p1 > p2) { return(1); } return(0); }