/// <summary> /// Gets the hash code of a member /// </summary> /// <param name="a">Member</param> /// <returns></returns> public int GetHashCode(DmdMemberInfo a) { if ((object)a == null) { return(0); } switch (a.MemberType) { case DmdMemberTypes.TypeInfo: case DmdMemberTypes.NestedType: return(GetHashCode((DmdType)a)); case DmdMemberTypes.Field: return(GetHashCode((DmdFieldInfo)a)); case DmdMemberTypes.Method: case DmdMemberTypes.Constructor: return(GetHashCode((DmdMethodBase)a)); case DmdMemberTypes.Property: return(GetHashCode((DmdPropertyInfo)a)); case DmdMemberTypes.Event: return(GetHashCode((DmdEventInfo)a)); } Debug.Fail($"Unknown type: {a.GetType()}"); return(0); }
/// <summary> /// Compares two members /// </summary> /// <param name="a">First member</param> /// <param name="b">Second member</param> /// <returns></returns> public bool Equals(DmdMemberInfo a, DmdMemberInfo b) { if ((object)a == b) { return(true); } if ((object)a == null || (object)b == null) { return(false); } switch (a.MemberType) { case DmdMemberTypes.TypeInfo: case DmdMemberTypes.NestedType: return(Equals((DmdType)a, b as DmdType)); case DmdMemberTypes.Field: return(Equals((DmdFieldInfo)a, b as DmdFieldInfo)); case DmdMemberTypes.Method: case DmdMemberTypes.Constructor: return(Equals((DmdMethodBase)a, b as DmdMethodBase)); case DmdMemberTypes.Property: return(Equals((DmdPropertyInfo)a, b as DmdPropertyInfo)); case DmdMemberTypes.Event: return(Equals((DmdEventInfo)a, b as DmdEventInfo)); } return(false); }
void Write(DmdMemberInfo member) { switch (member.MemberType) { case DmdMemberTypes.TypeInfo: case DmdMemberTypes.NestedType: Write((DmdType)member); break; case DmdMemberTypes.Field: Write((DmdFieldInfo)member); break; case DmdMemberTypes.Constructor: case DmdMemberTypes.Method: Write((DmdMethodBase)member); break; case DmdMemberTypes.Property: Write((DmdPropertyInfo)member); break; case DmdMemberTypes.Event: Write((DmdEventInfo)member); break; default: Debug.Fail($"Unknown member: {member.GetType()}"); break; } }
/// <summary> /// Checks if this instance and <paramref name="other"/> have the same metadata definition /// </summary> /// <param name="other">Other member</param> /// <returns></returns> public bool HasSameMetadataDefinitionAs(DmdMemberInfo other) { if (other is null) { throw new ArgumentNullException(nameof(other)); } return(other.Module == Module && other.MetadataToken == MetadataToken && MetadataToken != 0); }
/// <summary> /// Constructor /// </summary> /// <param name="memberInfo">A property or a field</param> /// <param name="typedArgument"></param> public DmdCustomAttributeNamedArgument(DmdMemberInfo memberInfo, DmdCustomAttributeTypedArgument typedArgument) { if ((object)typedArgument.ArgumentType == null) { throw new ArgumentException(); } MemberInfo = memberInfo ?? throw new ArgumentNullException(nameof(memberInfo)); TypedValue = typedArgument; }
string FormatCore(DmdMemberInfo member) { Write(member); return(writer.ToString()); }
public static string Format(DmdMemberInfo member, bool serializable = false) { using (var formatter = new DmdMemberFormatter(serializable ? GlobalFlags.Serializable : GlobalFlags.None)) return(formatter.FormatCore(member)); }