System.Reflection.Binder.Default.CompareCloserType C# (CSharp) Method

CompareCloserType() private method

private CompareCloserType ( Type t1, Type t2 ) : int
t1 Type
t2 Type
return int
			int CompareCloserType (Type t1, Type t2)
			{
				if (t1 == t2)
					return 0;
#if NET_2_0
				if (t1.IsGenericParameter && !t2.IsGenericParameter)
					return 1; // t2
				if (!t1.IsGenericParameter && t2.IsGenericParameter)
					return -1; // t1
#endif
				if (t1.HasElementType && t2.HasElementType)
					return CompareCloserType (
						t1.GetElementType (),
						t2.GetElementType ());

				if (t1.IsSubclassOf (t2))
					return -1; // t1
				if (t2.IsSubclassOf (t1))
					return 1; // t2

				if (t1.IsInterface && Array.IndexOf (t2.GetInterfaces (), t1) >= 0)
					return 1; // t2
				if (t2.IsInterface && Array.IndexOf (t1.GetInterfaces (), t2) >= 0)
					return -1; // t1

				// What kind of cases could reach here?
				return 0;
			}