public static MemberInfo FindMember(Type type, string memberName, BindingContract contract) { MemberInfo memberInfo; if (contract.MemberType.ContainsAll(MemberTypes.Property)) { #if !WINDOWS_UWP && !HAS_CRIPPLEDREFLECTION memberInfo = type.GetProperty(memberName, contract.BindingFlags, null, contract.ReturnType, contract.SafeTypes, null); #elif HAS_CRIPPLEDREFLECTION && !HAS_TYPEINFO memberInfo = type.GetProperty(memberName, contract.ReturnType, contract.SafeTypes); #else memberInfo = type.GetTypeInfo().GetDeclaredProperty(memberName); #endif if (memberInfo != null) { return(memberInfo); } } if (contract.MemberType.ContainsAll(MemberTypes.Event)) { #if !WINDOWS_UWP && !HAS_CRIPPLEDREFLECTION memberInfo = type.GetEvent(memberName, contract.BindingFlags); #else memberInfo = type.GetTypeInfo().GetDeclaredEvent(memberName); #endif if (memberInfo != null) { return(memberInfo); } } if (contract.MemberType.ContainsAll(MemberTypes.Field)) { #if !WINDOWS_UWP && !HAS_CRIPPLEDREFLECTION memberInfo = type.GetField(memberName, contract.BindingFlags); #else memberInfo = type.GetTypeInfo().GetDeclaredField(memberName); #endif if (memberInfo != null) { return(memberInfo); } } if (contract.MemberType.ContainsAll(MemberTypes.Method)) { #if !WINDOWS_UWP && !HAS_CRIPPLEDREFLECTION memberInfo = contract.Types == null ? type.GetMethod(memberName, contract.BindingFlags) : type.GetMethod(memberName, contract.BindingFlags, null, contract.Types, null); #elif HAS_CRIPPLEDREFLECTION && !HAS_TYPEINFO memberInfo = contract.Types == null ? type.GetMethod(memberName, contract.BindingFlags) : type.GetMethod(memberName, contract.Types); #else memberInfo = type.GetTypeInfo() .GetDeclaredMethods(memberName) .FirstOrDefault( m => m.GetParameters().Select(p => p.ParameterType).Equality().Equal(contract.Types) ); #endif if (memberInfo != null) { return(memberInfo); } } if (contract.MemberType.ContainsAll(MemberTypes.NestedType)) { #if !WINDOWS_UWP memberInfo = type.GetNestedType(memberName, contract.BindingFlags); #else memberInfo = type.GetTypeInfo().GetDeclaredNestedType(memberName); #endif if (memberInfo != null) { return(memberInfo); } } return(null); }