NetstandardHelpers
using System.Diagnostics.CodeAnalysis;
namespace System.Reflection
{
internal static class NetstandardHelpers
{
[System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("ReflectionAnalysis", "IL2070:UnrecognizedReflectionPattern", Justification = "This is finding the MemberInfo with the same MetadataToken as specified MemberInfo. If the specified MemberInfo exists and wasn't trimmed, then the current Type's MemberInfo couldn't have been trimmed.")]
public static MemberInfo GetMemberWithSameMetadataDefinitionAs(this Type type, MemberInfo member)
{
ExceptionPolyfills.ThrowIfNull(member, "member");
MemberInfo[] members = type.GetMembers(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
foreach (MemberInfo memberInfo in members) {
if (HasSameMetadataDefinitionAs(memberInfo, member))
return memberInfo;
}
throw new MissingMemberException(type.FullName, member.Name);
}
private static bool HasSameMetadataDefinitionAs(this MemberInfo info, MemberInfo other)
{
if (info.MetadataToken != other.MetadataToken)
return false;
if (!info.Module.Equals(other.Module))
return false;
return true;
}
public static bool IsGenericMethodParameter(this Type type)
{
if (type.IsGenericParameter)
return (object)type.DeclaringMethod != null;
return false;
}
public static ReadOnlySpan<ParameterInfo> GetParametersAsSpan(this MethodBase metaMethod)
{
return metaMethod.GetParameters();
}
}
}