// ** Lifted from MSDN ** // The identity most users would expect MemberInfos (other than Type) to have is not what Reflection provides. // So for example most folks would expect the following program to print true instead of false: // // public class B { public void M() { } } // public class D : B { } // public class Program // { // public static void Main // { // Console.WriteLine(typeof(B).GetMethod("M") == typeof(D).GetMethod("M")); // } // } // // The MethodInfos are not equal because ReflectedType is included in the identity of MethodInfos. // The identity Reflection uses for MethdInfo can be expressed as: // DeclaringType + MethodName + Signature + DeclaringType instantiation + Method Instantiation + ReflectedType // And what most users would expect it to be can be expressed as: // DeclaringType + MethodName + Signature + DeclaringType Instantiation + Method Instantiation // We can�t make them match because that would be a breaking change. However here is a little code snippet // that will do the comparison using the latter definition of identity. This will work for all subclasses of // MemberInfo (Type, MethodBase, MethodInfo, ConstructorInfo, FieldInfo, PropertyInfo and EventInfo): public static bool MemberInfoEquals(this MemberInfo lhs, MemberInfo rhs) => Framework_PM.MemberInfoEquals(lhs, rhs);