public MethodRefSignature(byte[] signiture) : base(Signatures.MethodRef) { Offset offset = 0; var calling = new CallingConventionSignatureToken(signiture, offset); Tokens.Add(calling); if ((calling.Convention & CallingConventions.Generic) != 0) { var genParamCount = new GenericParamaterCountSignatureToken(signiture, offset); Tokens.Add(genParamCount); } var paramCount = new ParameterCountSignatureToken(signiture, offset); Tokens.Add(paramCount); var returnType = new ReturnTypeSignatureToken(signiture, offset); Tokens.Add(returnType); for (int i = 0; i < paramCount.Count; i++) { if (SentinalSignatureToken.IsToken(signiture, offset)) { i--; // This is not a parameter Tokens.Add(new SentinalSignatureToken(signiture, offset)); } else { var param = new ParamSignatureToken(signiture, offset); Tokens.Add(param); } } }
/// <summary> /// Returns the token that describes the return type defined in the signiture. /// </summary> /// <returns>The Token or null if no return type defined.</returns> public ReturnTypeSignatureToken GetReturnTypeToken() { ReturnTypeSignatureToken token = null; for (int i = 0; i < _tokens.Count; i++) { if (_tokens[i] is ReturnTypeSignatureToken) { token = _tokens[i] as ReturnTypeSignatureToken; break; } } return(token); }