public static FromReader ( MetadataHeader header, IBinaryStreamReader reader ) : |
||
header | MetadataHeader | |
reader | IBinaryStreamReader | |
리턴 |
public static CustomAttributeNamedArgument FromReader(MetadataHeader header, IBinaryStreamReader reader)
{
var signature = new CustomAttributeNamedArgument
{
StartOffset = reader.Position,
ArgumentMemberType =
(reader.CanRead(sizeof (byte))
? (CustomAttributeArgumentMemberType)reader.ReadByte()
: CustomAttributeArgumentMemberType.Field),
ArgumentType = TypeSignature.ReadFieldOrPropType(header, reader),
MemberName = reader.ReadSerString(),
};
signature.Argument = CustomAttributeArgument.FromReader(header, signature.ArgumentType, reader);
return signature;
}
public static CustomAttributeSignature FromReader(CustomAttribute parent, IBinaryStreamReader reader) { if (!reader.CanRead(sizeof(ushort)) || reader.ReadUInt16() != 0x0001) { throw new ArgumentException("Signature doesn't refer to a valid custom attribute signature."); } var signature = new CustomAttributeSignature(); if (parent.Constructor != null) { var methodSignature = parent.Constructor.Signature as MethodSignature; if (methodSignature != null) { foreach (var parameter in methodSignature.Parameters) { signature.FixedArguments.Add(CustomAttributeArgument.FromReader(parent.Image, parameter.ParameterType, reader)); } } } var namedElementCount = reader.CanRead(sizeof(ushort)) ? reader.ReadUInt16() : 0; for (uint i = 0; i < namedElementCount; i++) { signature.NamedArguments.Add(CustomAttributeNamedArgument.FromReader(parent.Image, reader)); } return(signature); }