public OptionalAttributeInfo(DmdParameterInfo parameter)
 {
     if (parameter.IsOptional)
     {
         var caType = parameter.Member.AppDomain.GetWellKnownType(DmdWellKnownType.System_Runtime_InteropServices_OptionalAttribute, isOptional: true);
         ctor = caType?.GetConstructor(Array.Empty <DmdType>());
         Debug.Assert((object)caType == null || (object)ctor != null);
     }
     else
     {
         ctor = null;
     }
 }
示例#2
0
        /// <summary>
        /// Compares two method parameters
        /// </summary>
        /// <param name="a">First method parameter</param>
        /// <param name="b">Second method parameter</param>
        /// <returns></returns>
        public bool Equals(DmdParameterInfo a, DmdParameterInfo b)
        {
            if ((object)a == b)
            {
                return(true);
            }
            if ((object)a == null || (object)b == null)
            {
                return(false);
            }

            return(a.Position == b.Position &&
                   Equals(a.ParameterType, b.ParameterType) &&
                   (!CompareDeclaringType || Equals(a.Member, b.Member)));
        }
示例#3
0
        /// <summary>
        /// Gets the hash code of a method parameter
        /// </summary>
        /// <param name="a">Method parameter</param>
        /// <returns></returns>
        public int GetHashCode(DmdParameterInfo a)
        {
            if ((object)a == null)
            {
                return(0);
            }

            int hc = a.Position;

            hc ^= GetHashCode(a.ParameterType);
            if (CompareDeclaringType)
            {
                hc ^= GetHashCode(a.Member);
            }
            return(hc);
        }
示例#4
0
 void Write(DmdParameterInfo parameter)
 {
     FormatTypeName(parameter.ParameterType, GetTypeFlags(true) | TypeFlags.FnPtrIsIntPtr);
     writer.Append(' ');
     writer.Append(parameter.Name);
 }
示例#5
0
 string FormatCore(DmdParameterInfo parameter)
 {
     Write(parameter);
     return(writer.ToString());
 }
示例#6
0
 public static string Format(DmdParameterInfo parameter, bool serializable = false)
 {
     using (var formatter = new DmdMemberFormatter(serializable ? GlobalFlags.Serializable : GlobalFlags.None))
         return(formatter.FormatCore(parameter));
 }
示例#7
0
 public MarshalAsAttributeInfo(DmdParameterInfo parameter, DmdMarshalType marshalType) => ctor = Initialize(parameter.Member.AppDomain, marshalType);